@itwin/core-geometry 4.9.0-dev.2 → 4.9.0-dev.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -1
- package/lib/cjs/Geometry.d.ts +57 -46
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +73 -53
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +128 -34
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +174 -20
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +11 -6
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +2 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +11 -9
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +11 -9
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +4 -3
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +4 -3
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +39 -0
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +4 -4
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
- package/lib/cjs/curve/CurveOps.js +6 -6
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +7 -5
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +8 -6
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +6 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
- package/lib/cjs/curve/OffsetOptions.js +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +5 -6
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +4 -3
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +4 -3
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +18 -5
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +23 -7
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +47 -12
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +12 -10
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js +1 -7
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +6 -4
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +11 -10
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +7 -11
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +6 -1
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +9 -3
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/numerics/Newton.d.ts +3 -3
- package/lib/cjs/numerics/Newton.d.ts.map +1 -1
- package/lib/cjs/numerics/Newton.js +14 -16
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts +2 -2
- package/lib/cjs/numerics/Polynomials.js +2 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +11 -6
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +17 -14
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +59 -52
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +13 -6
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -2
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
- package/lib/cjs/solid/SweepContour.js +0 -4
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +1 -1
- package/lib/cjs/topology/Graph.js +2 -2
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts +2 -2
- package/lib/cjs/topology/Merging.js +2 -2
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +16 -10
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +23 -30
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.d.ts +57 -46
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +73 -53
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +128 -34
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +172 -19
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +11 -6
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +2 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +11 -9
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +11 -9
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +4 -3
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +4 -3
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +39 -0
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +4 -4
- package/lib/esm/curve/CurveOps.d.ts.map +1 -1
- package/lib/esm/curve/CurveOps.js +6 -6
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +7 -5
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +8 -6
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +6 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +1 -1
- package/lib/esm/curve/OffsetOptions.js +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +5 -6
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +4 -3
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +4 -3
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +18 -5
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +23 -7
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +47 -12
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +12 -10
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js +1 -7
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +6 -4
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +11 -10
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +7 -11
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +6 -1
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +9 -3
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/numerics/Newton.d.ts +3 -3
- package/lib/esm/numerics/Newton.d.ts.map +1 -1
- package/lib/esm/numerics/Newton.js +14 -16
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts +2 -2
- package/lib/esm/numerics/Polynomials.js +2 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +11 -6
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +17 -14
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +59 -52
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +13 -6
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -2
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/solid/SweepContour.d.ts.map +1 -1
- package/lib/esm/solid/SweepContour.js +0 -4
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +1 -1
- package/lib/esm/topology/Graph.js +2 -2
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts +2 -2
- package/lib/esm/topology/Merging.js +2 -2
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +16 -10
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +24 -31
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildAverageNormalsContext.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AA8C/C;;;;GAIG;AAEH,qBAAa,0BAA0B;IACrC;;;;;;;;;OASG;WACW,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"BuildAverageNormalsContext.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AA8C/C;;;;GAIG;AAEH,qBAAa,0BAA0B;IACrC;;;;;;;;;OASG;WACW,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK;IAkFtF;;;OAGG;WACW,mBAAmB,CAAC,QAAQ,EAAE,eAAe;CAmB5D"}
|
|
@@ -71,14 +71,21 @@ export class BuildAverageNormalsContext {
|
|
|
71
71
|
// create one IndexedAreaNormal structure for each facet.
|
|
72
72
|
// At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.
|
|
73
73
|
while (visitor.moveToNextFacet()) {
|
|
74
|
-
|
|
75
|
-
let area =
|
|
76
|
-
if (
|
|
77
|
-
facetNormal.
|
|
74
|
+
let facetNormal = PolygonOps.areaNormalGo(visitor.point);
|
|
75
|
+
let area = 0.0;
|
|
76
|
+
if (!facetNormal) {
|
|
77
|
+
facetNormal = defaultNormal.clone();
|
|
78
78
|
area = 0.0;
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
81
|
-
facetNormal.
|
|
81
|
+
area = facetNormal.magnitude();
|
|
82
|
+
if (area < smallArea) {
|
|
83
|
+
facetNormal.setFromVector3d(defaultNormal);
|
|
84
|
+
area = 0.0;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
facetNormal.scaleInPlace(1.0 / area);
|
|
88
|
+
}
|
|
82
89
|
}
|
|
83
90
|
const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);
|
|
84
91
|
for (let i = 0; i < visitor.pointCount; i++) {
|
|
@@ -104,7 +111,7 @@ export class BuildAverageNormalsContext {
|
|
|
104
111
|
const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());
|
|
105
112
|
clusters.push(clusterNormal);
|
|
106
113
|
// Accumulate with equal weights . . .
|
|
107
|
-
clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal
|
|
114
|
+
clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal);
|
|
108
115
|
for (let candidateSectorIndex = baseSectorIndex; candidateSectorIndex < sectors.length; candidateSectorIndex++) {
|
|
109
116
|
const candidateSector = sectors[candidateSectorIndex];
|
|
110
117
|
if (candidateSector.vertexIndex !== vertexIndex)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE;;;GAGG;AACH,MAAM,oBAAoB;IACxB,YAAmB,KAAa,EAAE,IAAY,EAAE,MAAgB;QAC9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAKM,iBAAiB,CAAC,MAAc,EAAE,MAAgB;QACvD,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACM,kBAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU;IACd,YAAoB,SAA+B,EAAE,WAAmB,EAAE,WAAmB;QAC3F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAKM,MAAM,CAAC,YAAY,CAAC,IAAgB,EAAE,KAAiB,IAAY,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,YAAY,CAAC,IAAgB,EAAE,KAAiB,IAAY,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,WAAW,CAAC,IAAkB,EAAE,SAA+B,EAAE,WAAmB,EAAE,WAAmB;QACrH,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;CACF;AACD;;;;GAIG;AAEH,MAAM,OAAO,0BAA0B;IACrC;;;;;;;;;OASG;IACI,MAAM,CAAC,uBAAuB,CAAC,QAAyB,EAAE,cAAqB;QACpF,8EAA8E;QAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAI,+BAA+B;QACzF,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,yDAAyD;QACzD,qHAAqH;QAErH,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;YAC5D,IAAI,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;gBACrB,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,GAAG,GAAG,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QACD,mFAAmF;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAEpE,4CAA4C;QAC5C,6BAA6B;QAC7B,0GAA0G;QAC1G,4EAA4E;QAC5E,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,IAAI,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;QAC9C,IAAI,gBAAgB,GAAG,MAAM;YAC3B,gBAAgB,GAAG,MAAM,CAAC;QAE5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC;YAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;YACzC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3F,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,sCAAsC;gBACtC,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxE,KAAK,IAAI,oBAAoB,GAAG,eAAe,EAC7C,oBAAoB,GAAG,OAAO,CAAC,MAAM,EACrC,oBAAoB,EAAE,EAAE,CAAC;oBACzB,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBACtD,IAAI,eAAe,CAAC,WAAW,KAAK,WAAW;wBAC7C,MAAM;oBACR,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,gBAAgB;wBAC3F,SAAS;oBACX,IAAI,eAAe,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBACpD,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACvE,eAAe,CAAC,iBAAiB,GAAG,aAAa,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,sDAAsD;QACtD,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,sBAAsB;QACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAkB,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,QAAyB;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,gCAAgC;QAChC,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;YAC1C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;gBAE7B,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE;gBACzC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IACpC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\r\nimport { IndexedPolyface } from \"../Polyface\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\n\r\n/**\r\n * Normal vector with area (or other numeric) and source index\r\n * @internal\r\n */\r\nclass IndexedAreaAndNormal {\r\n public constructor(index: number, area: number, normal: Vector3d) {\r\n this.index = index;\r\n this.area = area;\r\n this.normal = normal;\r\n }\r\n public index: number;\r\n public area: number;\r\n public normal: Vector3d;\r\n\r\n public addWeightedNormal(weight: number, normal: Vector3d) {\r\n this.area += weight;\r\n this.normal.addScaledInPlace(normal, weight);\r\n }\r\n public divideNormalByArea() {\r\n this.normal.scaleInPlace(1.0 / this.area);\r\n }\r\n}\r\n\r\n/**\r\n * index data for a single sector of some facet.\r\n * @internal\r\n */\r\nclass SectorData {\r\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n this.facetData = facetData;\r\n this.sectorClusterData = undefined;\r\n this.sectorIndex = sectorIndex;\r\n this.vertexIndex = vertexIndex;\r\n }\r\n public facetData: IndexedAreaAndNormal;\r\n public sectorIndex: number;\r\n public vertexIndex: number;\r\n public sectorClusterData: IndexedAreaAndNormal | undefined;\r\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\r\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\r\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\r\n }\r\n}\r\n/**\r\n * Helper context for normal averaging.\r\n * All methods are static.\r\n * @internal\r\n */\r\n\r\nexport class BuildAverageNormalsContext {\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\r\n // We ASSUME that the visitor order matches index order in polyface.data .....\r\n const visitor = polyface.createVisitor(0);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\r\n const sectors: SectorData[] = [];\r\n let facetIndex = 0;\r\n let sectorIndex = 0;\r\n // create one IndexedAreaNormal structure for each facet.\r\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\r\n\r\n while (visitor.moveToNextFacet()) {\r\n const facetNormal = PolygonOps.areaNormalGo(visitor.point)!;\r\n let area = facetNormal.magnitude();\r\n if (area < smallArea) {\r\n facetNormal.setFromVector3d(defaultNormal);\r\n area = 0.0;\r\n } else {\r\n facetNormal.scaleInPlace(1.0 / area);\r\n }\r\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\r\n for (let i = 0; i < visitor.pointCount; i++) {\r\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\r\n }\r\n }\r\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\r\n sectors.sort((left, right) => SectorData.cbVertexSort(left, right));\r\n\r\n // Walk the sectors around each vertex . ..\r\n // For each unassigned sector\r\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\r\n // notate all sectors in the cluster with the averaged-normal structure.\r\n const clusters: IndexedAreaAndNormal[] = [];\r\n let toleranceRadians = toleranceAngle.radians;\r\n if (toleranceRadians < 0.0001)\r\n toleranceRadians = 0.0001;\r\n\r\n let clusterIndex = 0;\r\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\r\n const baseData = sectors[baseSectorIndex];\r\n const vertexIndex = baseData.vertexIndex;\r\n const baseFacetData = baseData.facetData;\r\n if (baseData.sectorClusterData === undefined) {\r\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\r\n clusters.push(clusterNormal);\r\n // Accumulate with equal weights . . .\r\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal.clone());\r\n for (let candidateSectorIndex = baseSectorIndex;\r\n candidateSectorIndex < sectors.length;\r\n candidateSectorIndex++) {\r\n const candidateSector = sectors[candidateSectorIndex];\r\n if (candidateSector.vertexIndex !== vertexIndex)\r\n break;\r\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\r\n continue;\r\n if (candidateSector.sectorClusterData === undefined) {\r\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\r\n candidateSector.sectorClusterData = clusterNormal;\r\n }\r\n }\r\n }\r\n }\r\n // Resort by original sector index.\r\n sectors.sort((left, right) => SectorData.cbSectorSort(left, right));\r\n // normalize the sums and emplace in the facets . . .\r\n polyface.data.normalIndex = [];\r\n polyface.data.normal = new GrowableXYZArray(sectors.length);\r\n for (const cluster of clusters) {\r\n cluster.divideNormalByArea();\r\n cluster.index = polyface.data.normal.length;\r\n polyface.data.normal.push(cluster.normal);\r\n }\r\n // emplace the indices\r\n for (const sector of sectors) {\r\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\r\n }\r\n }\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface mesh to modify\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n const visitor = polyface.createVisitor(0);\r\n const facetNormal = Vector3d.create(0, 0, 1);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n // polyface.data.clearNormals();\r\n const newNormals = new GrowableXYZArray(polyface.faceCount);\r\n const newIndices: number[] = [];\r\n while (visitor.moveToNextFacet()) {\r\n const thisNormalIndex = newNormals.length;\r\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\r\n newNormals.push(facetNormal);\r\n else\r\n newNormals.push(defaultNormal);\r\n for (let i = 0; i < visitor.pointCount; i++)\r\n newIndices.push(thisNormalIndex);\r\n }\r\n polyface.data.normalIndex = newIndices;\r\n polyface.data.normal = newNormals;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\r\nimport { IndexedPolyface } from \"../Polyface\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\n\r\n/**\r\n * Normal vector with area (or other numeric) and source index\r\n * @internal\r\n */\r\nclass IndexedAreaAndNormal {\r\n public constructor(index: number, area: number, normal: Vector3d) {\r\n this.index = index;\r\n this.area = area;\r\n this.normal = normal;\r\n }\r\n public index: number;\r\n public area: number;\r\n public normal: Vector3d;\r\n\r\n public addWeightedNormal(weight: number, normal: Vector3d) {\r\n this.area += weight;\r\n this.normal.addScaledInPlace(normal, weight);\r\n }\r\n public divideNormalByArea() {\r\n this.normal.scaleInPlace(1.0 / this.area);\r\n }\r\n}\r\n\r\n/**\r\n * index data for a single sector of some facet.\r\n * @internal\r\n */\r\nclass SectorData {\r\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n this.facetData = facetData;\r\n this.sectorClusterData = undefined;\r\n this.sectorIndex = sectorIndex;\r\n this.vertexIndex = vertexIndex;\r\n }\r\n public facetData: IndexedAreaAndNormal;\r\n public sectorIndex: number;\r\n public vertexIndex: number;\r\n public sectorClusterData: IndexedAreaAndNormal | undefined;\r\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\r\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\r\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\r\n }\r\n}\r\n/**\r\n * Helper context for normal averaging.\r\n * All methods are static.\r\n * @internal\r\n */\r\n\r\nexport class BuildAverageNormalsContext {\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\r\n // We ASSUME that the visitor order matches index order in polyface.data .....\r\n const visitor = polyface.createVisitor(0);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\r\n const sectors: SectorData[] = [];\r\n let facetIndex = 0;\r\n let sectorIndex = 0;\r\n // create one IndexedAreaNormal structure for each facet.\r\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\r\n while (visitor.moveToNextFacet()) {\r\n let facetNormal = PolygonOps.areaNormalGo(visitor.point);\r\n let area = 0.0;\r\n if (!facetNormal) {\r\n facetNormal = defaultNormal.clone();\r\n area = 0.0;\r\n } else {\r\n area = facetNormal.magnitude();\r\n if (area < smallArea) {\r\n facetNormal.setFromVector3d(defaultNormal);\r\n area = 0.0;\r\n } else {\r\n facetNormal.scaleInPlace(1.0 / area);\r\n }\r\n }\r\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\r\n for (let i = 0; i < visitor.pointCount; i++) {\r\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\r\n }\r\n }\r\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\r\n sectors.sort((left, right) => SectorData.cbVertexSort(left, right));\r\n\r\n // Walk the sectors around each vertex . ..\r\n // For each unassigned sector\r\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\r\n // notate all sectors in the cluster with the averaged-normal structure.\r\n const clusters: IndexedAreaAndNormal[] = [];\r\n let toleranceRadians = toleranceAngle.radians;\r\n if (toleranceRadians < 0.0001)\r\n toleranceRadians = 0.0001;\r\n\r\n let clusterIndex = 0;\r\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\r\n const baseData = sectors[baseSectorIndex];\r\n const vertexIndex = baseData.vertexIndex;\r\n const baseFacetData = baseData.facetData;\r\n if (baseData.sectorClusterData === undefined) {\r\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\r\n clusters.push(clusterNormal);\r\n // Accumulate with equal weights . . .\r\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal);\r\n for (let candidateSectorIndex = baseSectorIndex;\r\n candidateSectorIndex < sectors.length;\r\n candidateSectorIndex++) {\r\n const candidateSector = sectors[candidateSectorIndex];\r\n if (candidateSector.vertexIndex !== vertexIndex)\r\n break;\r\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\r\n continue;\r\n if (candidateSector.sectorClusterData === undefined) {\r\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\r\n candidateSector.sectorClusterData = clusterNormal;\r\n }\r\n }\r\n }\r\n }\r\n // Resort by original sector index.\r\n sectors.sort((left, right) => SectorData.cbSectorSort(left, right));\r\n // normalize the sums and emplace in the facets . . .\r\n polyface.data.normalIndex = [];\r\n polyface.data.normal = new GrowableXYZArray(sectors.length);\r\n for (const cluster of clusters) {\r\n cluster.divideNormalByArea();\r\n cluster.index = polyface.data.normal.length;\r\n polyface.data.normal.push(cluster.normal);\r\n }\r\n // emplace the indices\r\n for (const sector of sectors) {\r\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\r\n }\r\n }\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface mesh to modify\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n const visitor = polyface.createVisitor(0);\r\n const facetNormal = Vector3d.create(0, 0, 1);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n // polyface.data.clearNormals();\r\n const newNormals = new GrowableXYZArray(polyface.faceCount);\r\n const newIndices: number[] = [];\r\n while (visitor.moveToNextFacet()) {\r\n const thisNormalIndex = newNormals.length;\r\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\r\n newNormals.push(facetNormal);\r\n else\r\n newNormals.push(defaultNormal);\r\n for (let i = 0; i < visitor.pointCount; i++)\r\n newIndices.push(thisNormalIndex);\r\n }\r\n polyface.data.normalIndex = newIndices;\r\n polyface.data.normal = newNormals;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BGFBReader.js","sourceRoot":"","sources":["../../../src/serialization/BGFBReader.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAmB,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACrB;IACA,CAAC;IACD;;;OAGG;IACI,6BAA6B,CAAC,aAA4C;QAC/E,IAAI,UAA4D,CAAC;QACjE,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;YAC1E,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;YAC/E,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;gBAEtC,IAAI,QAAQ,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBACpE,MAAM,MAAM,GAAG,oBAAoB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBACxI,IAAI,WAAW,KAAK,IAAI;wBACtB,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC;oBAC/B,IAAI,OAAO;wBACT,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBAC/B,IAAI,OAAO;wBACT,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBAE/B,IAAI,oBAAoB,CAAC,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,EAAE,CAAC;wBACtF,IAAI,SAAS,KAAK,MAAM,CAAC,OAAO;4BAC9B,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;4BAE7M,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAqB,EAAE,MAAM,CAAC,OAAuB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAEhP,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;4BAC7B,IAAI,SAAS,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ;gCACvC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;4BACxE,IAAI,SAAS,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ;gCACvC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAC1E,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEF;;;MAGE;IACM,wBAAwB,CAAC,MAAwC;QACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,QAAQ,YAAY,YAAY,EAAC,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACzI,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,OAAO,CAAC,oBAAoB,CAC1B,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,MAAM,EAAE,EACf,MAAM,CAAC,eAAe,EAAE,EACxB,MAAM,CAAC,kBAAkB,EAAE,EAC3B,MAAM,CAAC,kBAAkB,EAAE,EAC3B,MAAM,CAAC,iBAAiB,EAAG,EAC3B,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EACzG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACrG,OAAO,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,MAAgC;QACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,QAAQ,YAAY,YAAY,EAAC,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClF,OAAO,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QACH,OAAO,SAAS,CAAC;IACjB,CAAC;IACD;;;SAGK;IACI,gBAAgB,CAAC,MAAkC;QACxD,IAAI,QAAsD,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAE/B,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChG,IAAI,MAAM;gBACR,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YAE9B,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,IAAI,oBAAoB,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC;oBAC7D,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;gBAC9B,IAAI,oBAAoB,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;oBACjF,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAqB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChJ,CAAC;YAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ;oBACtC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD;;;OAGG;IACI,oBAAoB,CAAC,MAAsC;QAChE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACjD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;YACxF,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAC1D,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAC1E,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAC1E,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7E,SAAS,CAAC,cAAc,EAAE,CAAC;YAE7B,MAAM,sBAAsB,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EACtE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,gCAAgC,CAC1E,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EACpH,UAAU,CAAC,qBAAqB,CAAC,eAAe,EAAE,eAAe,CAAC,EAClE,sBAAsB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;gBACxD,IAAI,gBAAgB;oBAClB,OAAO,gBAAgB,CAAC;gBAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACjE,MAAM,OAAO,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACjE,MAAM,SAAS,GAAG,kBAAkB,CAAC,mCAAmC,CAAC,OAAO,EAAE,OAAO,EACvF,eAAe,GAAG,eAAe,CAAC,CAAC;gBACrC,MAAM,YAAY,GAAG,cAAc,CAAC,yBAAyB,CAC3D,cAAe,EACf,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,EACpC,KAAK,CAAC,aAAa,CAAE,eAAe,CAAC,EACrC,SAAS,EACT,sBAAsB,EACtB,YAAY,CAAC,CAAC;gBAChB,IAAI,YAAY;oBACd,OAAO,YAAY,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,6BAA6B,CAAC,OAAsC;QACzE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9E,MAAM,mBAAmB,GAAG,mBAAoB,CAAC,OAAO,EAAE,CAAC;YAC3D,OAAO,aAAa,CAAC,YAAY,CAC/B,mBAAoB,CAAC,OAAO,EAAE,EAAE,mBAAoB,CAAC,OAAO,EAAE,EAAE,mBAAoB,CAAC,OAAO,EAAE,EAC9F,mBAAoB,CAAC,OAAO,EAAE,EAAE,mBAAoB,CAAC,OAAO,EAAE,EAAE,mBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;YAC9E,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9E,MAAM,mBAAmB,GAAG,mBAAoB,CAAC,GAAG,EAAG,CAAC;YACxD,OAAO,KAAK,CAAC,eAAe,CAC1B,mBAAmB,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,OAAO,EAAE,EAC3F,mBAAmB,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAC9F,mBAAmB,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,SAAS,EAAE,EACjG,UAAU,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,YAAY,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACjH,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC;YAC7E,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,CAAE,CAAC;YAC7E,MAAM,cAAc,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;YACnI,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;YAC/E,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1E,IAAI,cAAc,KAAK,IAAI;gBACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC;YACnF,MAAM,6BAA6B,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC7F,IAAI,6BAA6B,KAAK,IAAI;gBACxC,OAAO,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;YACnF,MAAM,+BAA+B,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACjG,IAAI,+BAA+B,KAAK,IAAI;gBAC5C,OAAO,IAAI,CAAC,wBAAwB,CAAC,+BAA+B,CAAC,CAAC;QAC1E,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC;YACzE,MAAM,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YACjF,IAAI,uBAAuB,KAAK,IAAI;gBAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,0BAA0B,CAAC,OAAsC;QACtE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAE,CAAC;YAC9E,MAAM,cAAc,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC;YAC1I,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8CAA8C;IACvC,0BAA0B,CAAC,iBAA8D;QAC9F,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,MAAM,KAAK,IAAI;gBACjB,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,yCAAyC;IAClC,sBAAsB,CAAC,aAAsD;QAClF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,gBAAgB,GAAqB,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3E,IAAI,WAAW;oBACb,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,IAAI,UAAU,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oFAAoF;IAC5E,MAAM,CAAC,iBAAiB,CAAC,SAAwC;QACvE,IAAI,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC;YACjC,OAAO,CAAC,CAAC;QAEX,MAAM,UAAU,GAAG,eAAe,CAAmC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,UAAU;YACb,OAAO,CAAC,CAAC;QAEX,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,eAAe,IAAI,CAAC;YACtB,OAAO,CAAC,CAAC;QAEX,MAAM,eAAe,GAAG,eAAe,CAAuC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,eAAe;YAClB,OAAO,CAAC,CAAC;QAEX,MAAM,oBAAoB,GAAG,eAAe,CAAC,YAAY,EAAE,CAAC;QAC5D,IAAI,oBAAoB,IAAI,CAAC;YAC3B,OAAO,CAAC,CAAC;QAEX,OAAO,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,kDAAkD;IAC1C,aAAa,CAAC,IAAgB;QACpC,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,GAAG,CAAC;gBACT,GAAG,GAAG,CAAC,CAAC;YACV,IAAI,GAAG,GAAG,CAAC;gBACT,GAAG,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,KAAK,CAAC;gBACT,EAAE,SAAS,CAAC;QAChB,CAAC;QACD,OAAO,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,mBAAmB,CAAC,UAAyC,EAAE,SAA+C;QACnH,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS;YAC3B,OAAO,SAAS,CAAC;QAEnB,MAAM,cAAc,GAAG,eAAe,CAAa,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,eAAe,CAAa,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,WAAW,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;YAC1H,OAAO,SAAS,CAAC;QAEnB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAE3C,4JAA4J;QAC5J,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,oBAAoB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAClF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,cAAc,CAAC,GAAG,GAAG,SAAS,EAAE,qBAAqB;gBACvD,OAAO,SAAS,CAAC;YACnB,IAAI,cAAc,CAAC,GAAG,KAAK,SAAS,EAAE,qBAAqB;gBACzD,QAAQ,GAAG,KAAK,CAAC;iBACd,IAAI,cAAc,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,GAAG,CAAC,EAAE,8BAA8B;gBACxF,QAAQ,GAAG,KAAK,CAAC;iBACd,IAAI,cAAc,CAAC,GAAG,KAAK,CAAC,EAAE,2EAA2E;gBAC5G,QAAQ,GAAG,oBAAoB,KAAK,cAAc,CAAC,SAAS,CAAC;iBAC1D,IAAI,cAAc,CAAC,GAAG,GAAG,CAAC,EAAE,2FAA2F;gBAC1H,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,oBAAoB,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC;QACrI,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;YAC5D,OAAO,SAAS,CAAC,CAAC,qBAAqB;QAEzC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,QAAQ;YACV,oBAAoB,CAAC,4CAA4C,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAEnJ,oBAAoB,CAAC,iDAAiD,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,IAAI,OAAO,CAAC,MAAM,GAAG,oBAAoB,KAAK,cAAc,CAAC,MAAM;YACjE,OAAO,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU;oBACvC,OAAO,SAAS,CAAC,CAAC,gBAAgB;gBACpC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAClB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,6CAA6C;IACtC,qBAAqB,CAAC,QAAqD;QAChF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,MAAM,YAAY,GAAG,eAAe,CAAa,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1E,MAAM,eAAe,GAAG,eAAe,CAAe,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;YAClF,IAAI,YAAY,EAAE,CAAC;gBACjB,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,YAAY;oBAC1B,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtC,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBACpB,iBAAiB,CAAC,UAAU,GAAG,EAAE,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,eAAe;oBAC7B,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,uBAAuB,CAAC,OAAsC;QACnE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;YACpE,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC;gBACzD,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;gBAE/C,MAAM,QAAQ,GAAG,eAAe,CAAe,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC5E,MAAM,QAAQ,GAAG,eAAe,CAAe,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC5E,MAAM,SAAS,GAAG,eAAe,CAAe,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC9E,MAAM,WAAW,GAAG,eAAe,CAAc,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;gBAEjF,MAAM,aAAa,GAAG,eAAe,CAAa,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;gBACpF,MAAM,aAAa,GAAG,eAAe,CAAa,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;gBACpF,MAAM,cAAc,GAAG,eAAe,CAAa,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACtF,MAAM,aAAa,GAAG,eAAe,CAAa,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;gBACpF,MAAM,uBAAuB,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAEnE,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,oCAAoC,CAAC,CAAC;gBAE9D,oCAAoC;gBACpC,6EAA6E;gBAC7E,kDAAkD;gBAClD,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;oBACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC1C,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAC7B,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;oBAE3C,IAAI,SAAS,IAAI,cAAc,EAAE,CAAC;wBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;4BAC9C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC1E,oBAAoB,CAAC,iDAAiD,CAAC,cAAc,EAAE,UAAU,EAC/F,CAAC,CAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,CAAC;oBACD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;wBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;4BAC7C,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpD,oBAAoB,CAAC,iDAAiD,CAAC,aAAa,EAAE,UAAU,EAC9F,CAAC,CAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,CAAC;oBACD,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;wBACjC,KAAK,MAAM,CAAC,IAAI,WAAW;4BACzB,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACvB,oBAAoB,CAAC,iDAAiD,CAAC,aAAa,EAAE,UAAU,EAC9F,CAAC,CAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,CAAC;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;wBAC7C,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtE,oBAAoB,CAAC,iDAAiD,CAAC,aAAa,EAAE,UAAU,EAC9F,CAAC,CAAS,EAAE,CAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7D,GAAG,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE7C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;wBAChC,OAAO,SAAS,CAAC;oBAEnB,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;oBAE3F,IAAI,uBAAuB,EAAE,CAAC;wBAC1B,MAAM,yBAAyB,GAAG,eAAe,CAAkC,uBAAuB,CAAC,CAAC;wBAC5G,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;4BAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;4BAChF,IAAI,iBAAiB,KAAK,SAAS;gCACjC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;wBAC5D,CAAC;oBACH,CAAC;oBACD,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,uCAAuC,CAAC,OAAkC;QAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;gBAC9D,IAAI,KAAK;oBACP,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBAC3B,CAAC;oBACJ,MAAM,eAAe,GAAG,IAAI,CAAC,sCAAsC,CAAC,WAAW,CAAC,CAAC;oBACjF,IAAI,eAAe;wBACjB,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD;;;KAGC;IACM,sCAAsC,CAAC,OAAsC;QAClF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAE,CAAC;YACnE,OAAO,IAAI,CAAC,uCAAuC,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;KAGC;IACM,6BAA6B,CAAC,OAAsC;QACzE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC;YAClE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAO,CAAC,MAAM,EAAG,CAAC;YACjC,OAAO,GAAG,CAAC,YAAY,CACrB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,EAChF,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EACxE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EACxE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAC7E,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,EAC5D,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrB,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;YACvE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAO,CAAC,MAAM,EAAG,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,EAAG,CAAC;YAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAC5C,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EACtE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EACtE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC,eAAe,CAAC,YAAY,EACxC,UAAU,CAAC,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC,EAChG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrB,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAO,CAAC,MAAM,EAAG,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1G,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE,CAAE,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAG,CAAC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9I,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE,CAAE,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,uCAAuC,CAAC,SAAS,CAAC,CAAC;gBACxE,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;YAChF,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,kBAAkB,EAAE,CAAE,CAAC;YACzE,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACrG,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9D,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,uCAAuC,CAAC,SAAS,CAAC,CAAC;gBACxE,OAAO,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAAC,IAAI,YAAY,KAAK,aAAa,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;YAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,aAAa,EAAE,CAAE,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAsB,EAAE,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,uCAAuC,CAAC,YAAY,CAAC,CAAC;oBAC3E,IAAI,OAAO;wBACT,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,4BAA4B,CAAC,OAAsC;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACxC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,CAAC;YACvD,KAAK,aAAa,CAAC,oBAAoB,CAAC,aAAa,CAAC;YACtD,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc,CAAC;YACvD,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,CAAC;YACxD,KAAK,aAAa,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;YAC5D,KAAK,aAAa,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;YAC5D,KAAK,aAAa,CAAC,oBAAoB,CAAC,aAAa;gBACnD,CAAC;oBACD,OAAO,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;gBACrD,CAAC;YACH,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc;gBACpD,CAAC;oBACC,OAAO,IAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;gBAC9D,CAAC;YACH,KAAK,aAAa,CAAC,oBAAoB,CAAC,WAAW;gBACjD,CAAC;oBACC,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC/C,CAAC;YACH,KAAK,aAAa,CAAC,oBAAoB,CAAC,SAAS,CAAC;YAClD,KAAK,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC;YACnD,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,CAAC;YACxD,KAAK,aAAa,CAAC,oBAAoB,CAAC,YAAY,CAAC;YACrD,KAAK,aAAa,CAAC,oBAAoB,CAAC,eAAe,CAAC;YACxD,KAAK,aAAa,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;YAC9D,KAAK,aAAa,CAAC,oBAAoB,CAAC,gBAAgB;gBACtD,CAAC;oBACC,OAAO,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;gBACrD,CAAC;YACH,KAAK,aAAa,CAAC,oBAAoB,CAAC,0BAA0B;gBAChE,CAAC;oBACC,MAAM,QAAQ,GAAoB,EAAE,CAAC;oBACrC,MAAM,+BAA+B,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;oBACtG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,+BAAgC,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1E,MAAM,KAAK,GAAG,+BAAgC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACnB,MAAM,aAAa,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;4BAC/D,IAAI,aAAa,YAAY,aAAa,EAAE,CAAC;gCAC3C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BAC/B,CAAC;iCAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gCACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;4BAClC,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,KAAK,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,aAAa,CAAC,oBAAoB,CAAC,cAAc;gBACpD,CAAC;oBACC,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;gBAClD,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,eAAe,CAAC,QAAoB,EAAE,SAAsB;QACxE,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;gBACpC,OAAO,SAAS,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;gBACvC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;oBAC9B,OAAO,SAAS,CAAC;YACrB,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;CAEF;AACD;;;GAGG;AACH,SAAS,eAAe,CAAI,IAAS;IACnC,IAAI,IAAI,KAAK,IAAI;QACf,OAAO,SAAS,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,cAAsB;IACxD,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IAC5C,IAAI,cAAc,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IACpE,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,IAAI,YAAY,EAAE,CAAC;IACpD,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,IAAI,WAAW,EAAE,CAAC;IACnD,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC;AACD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAwB/B,8EAA8E;IACvE,MAAM,CAAC,gBAAgB,CAAC,QAAgB;QAC7C,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;YAC3D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACvB,OAAO,KAAK,CAAC,CAAC,CAAW,CAAC;QAC9B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,uDAAuD;IAChD,MAAM,CAAC,gBAAgB,CAAC,CAAS,EAAE,oBAA6B,IAAI;QACzE,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;YAC3D,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAW,CAAC;gBACnD,OAAO,KAAK,CAAC,CAAC,CAAW,CAAC;QAC9B,CAAC;QACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,CAAC;IACD,0DAA0D;IACnD,MAAM,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,OAAO,QAAQ,IAAI,EAAE,CAAC;IACxB,CAAC;;AA3CD,iEAAiE;AACjE,qDAAqD;AACtC,sCAAiB,GAAG;IACjC,CAAC,EAAE,EAAE,UAAU,CAAC;IAChB,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,aAAa,CAAC;IACnB,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,UAAU,CAAC;IAChB,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAExB,CAAC,EAAE,EAAE,mBAAmB,CAAC;IACzB,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,oBAAoB,CAAC;IAC1B,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,EAAE,aAAa,CAAC;IACnB,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,iBAAiB,CAAC;IACvB,CAAC,EAAE,EAAE,qBAAqB,CAAC;IAC3B,CAAC,EAAE,EAAE,cAAc,CAAC;IACpB,CAAC,EAAE,EAAE,YAAY,CAAC;IAClB,CAAC,EAAE,EAAE,eAAe,CAAC;CACtB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { flatbuffers } from \"flatbuffers\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AkimaCurve3d, AkimaCurve3dOptions } from \"../bspline/AkimaCurve3d\";\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d, InterpolationCurve3dOptions } from \"../bspline/InterpolationCurve3d\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { PointString3d } from \"../curve/PointString3d\";\r\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\r\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray, Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { AuxChannel, AuxChannelData, PolyfaceAuxData } from \"../polyface/AuxData\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\nimport { BGFBAccessors } from \"./BGFBAccessors\";\r\nimport { SerializationHelpers } from \"./SerializationHelpers\";\r\n\r\n/** * Context to write to a flatbuffer blob.\r\n * * This class is internal.\r\n * * Public access is through BentleyGeometryFlatBuffer.geometryToBytes()\r\n * @internal\r\n */\r\nexport class BGFBReader {\r\n public constructor() {\r\n }\r\n /**\r\n * Extract a bspline surface\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readBSplineSurfaceFromVariant(variantHeader: BGFBAccessors.VariantGeometry): BSplineSurface3d | BSplineSurface3dH | undefined {\r\n let newSurface: BSplineSurface3d | BSplineSurface3dH | undefined;\r\n const geometryType = variantHeader.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagBsplineSurface) {\r\n const bsurfHeader = variantHeader.geometry(new BGFBAccessors.BsplineSurface());\r\n if (bsurfHeader !== null) {\r\n const orderU = bsurfHeader.orderU();\r\n const orderV = bsurfHeader.orderV();\r\n const numPolesU = bsurfHeader.numPolesU();\r\n const numPolesV = bsurfHeader.numPolesV();\r\n const xyzArray = bsurfHeader.polesArray();\r\n const knotArrayU = bsurfHeader.knotsUArray();\r\n const knotArrayV = bsurfHeader.knotsVArray();\r\n const weightArray = bsurfHeader.weightsArray();\r\n const closedU = bsurfHeader.closedU();\r\n const closedV = bsurfHeader.closedV();\r\n\r\n if (xyzArray !== null && knotArrayU !== null && knotArrayV !== null) {\r\n const myData = SerializationHelpers.createBSplineSurfaceData(xyzArray, 3, knotArrayU, numPolesU, orderU, knotArrayV, numPolesV, orderV);\r\n if (weightArray !== null)\r\n myData.weights = weightArray;\r\n if (closedU)\r\n myData.uParams.closed = true;\r\n if (closedV)\r\n myData.vParams.closed = true;\r\n\r\n if (SerializationHelpers.Import.prepareBSplineSurfaceData(myData, {jsonPoles: false})) {\r\n if (undefined === myData.weights)\r\n newSurface = BSplineSurface3d.create(myData.poles as Float64Array, myData.uParams.numPoles, myData.uParams.order, myData.uParams.knots, myData.vParams.numPoles, myData.vParams.order, myData.vParams.knots);\r\n else\r\n newSurface = BSplineSurface3dH.create(myData.poles as Float64Array, myData.weights as Float64Array, myData.uParams.numPoles, myData.uParams.order, myData.uParams.knots, myData.vParams.numPoles, myData.vParams.order, myData.vParams.knots);\r\n\r\n if (undefined !== newSurface) {\r\n if (undefined !== myData.uParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.uDirection, myData.uParams.wrapMode);\r\n if (undefined !== myData.vParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.vDirection, myData.vParams.wrapMode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return newSurface;\r\n }\r\n\r\n /**\r\n * Extract an interpolating curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readInterpolationCurve3d(header: BGFBAccessors.InterpolationCurve): InterpolationCurve3d | undefined {\r\n const xyzArray = header.fitPointsArray();\r\n if (xyzArray instanceof Float64Array){\r\n const knots = header.knotsArray();\r\n const options = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(xyzArray), knots ? NumberArray.create(knots) : undefined);\r\n const startTangent = header.startTangent();\r\n const endTangent = header.endTangent();\r\n options.captureOptionalProps(\r\n header.order(),\r\n header.closed(),\r\n header.isChordLenKnots(),\r\n header.isColinearTangents(),\r\n header.isChordLenTangents(),\r\n header.isNaturalTangents (),\r\n startTangent !== null ? Vector3d.create(startTangent.x(), startTangent.y(), startTangent.z()) : undefined,\r\n endTangent !== null ? Vector3d.create(endTangent.x(), endTangent.y(), endTangent.z()) : undefined);\r\n return InterpolationCurve3d.createCapture(options);\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Extract an akima curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readAkimaCurve3d(header: BGFBAccessors.AkimaCurve): AkimaCurve3d | undefined {\r\n const xyzArray = header.pointsArray();\r\n if (xyzArray instanceof Float64Array){\r\n const options = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(xyzArray));\r\n return AkimaCurve3d.createCapture(options);\r\n }\r\nreturn undefined;\r\n}\r\n/**\r\n * Extract a bspline curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readBSplineCurve(header: BGFBAccessors.BsplineCurve): BSplineCurve3d | BSplineCurve3dH | undefined {\r\n let newCurve: BSplineCurve3d | BSplineCurve3dH | undefined;\r\n const order = header.order();\r\n const xyzArray = header.polesArray();\r\n const knots = header.knotsArray();\r\n const weightsArray = header.weightsArray();\r\n const closed = header.closed();\r\n\r\n if (xyzArray !== null && knots !== null) {\r\n const numPoles = Math.floor(xyzArray.length / 3);\r\n const myData = SerializationHelpers.createBSplineCurveData(xyzArray, 3, knots, numPoles, order);\r\n if (closed)\r\n myData.params.closed = true;\r\n\r\n if (weightsArray === null) {\r\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData))\r\n newCurve = BSplineCurve3d.create(myData.poles, myData.params.knots, myData.params.order);\r\n } else {\r\n myData.weights = weightsArray;\r\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData, {jsonPoles: false}))\r\n newCurve = BSplineCurve3dH.create({ xyz: myData.poles as Float64Array, weights: myData.weights }, myData.params.knots, myData.params.order);\r\n }\r\n\r\n if (undefined !== newCurve) {\r\n if (undefined !== myData.params.wrapMode)\r\n newCurve.setWrappable(myData.params.wrapMode);\r\n }\r\n }\r\n return newCurve;\r\n }\r\n /**\r\n * Extract a bspline curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readTransitionSpiral(header: BGFBAccessors.TransitionSpiral): TransitionSpiral3d | undefined {\r\n const detailHeader = header.detail();\r\n if (detailHeader) {\r\n const directDetailHeader = header.directDetail();\r\n const _extraDataArray = header.extraDataArray();\r\n const spiralTypeName = DgnSpiralTypeQueries.typeCodeToString(detailHeader.spiralType());\r\n const curvature0 = detailHeader.curvature0();\r\n const curvature1 = detailHeader.curvature1();\r\n const bearing0Radians = detailHeader.bearing0Radians();\r\n const bearing1Radians = detailHeader.bearing1Radians();\r\n const fbTransform = detailHeader.transform();\r\n const localToWorld = fbTransform ? Transform.createRowValues(\r\n fbTransform.axx(), fbTransform.axy(), fbTransform.axz(), fbTransform.axw(),\r\n fbTransform.ayx(), fbTransform.ayy(), fbTransform.ayz(), fbTransform.ayw(),\r\n fbTransform.azx(), fbTransform.azy(), fbTransform.azz(), fbTransform.azw()) :\r\n Transform.createIdentity();\r\n\r\n const activeFractionInterval = Segment1d.create(detailHeader.fractionA(),\r\n detailHeader.fractionB());\r\n if (!directDetailHeader) {\r\n const integratedSpiral = IntegratedSpiral3d.createRadiusRadiusBearingBearing(\r\n Segment1d.create(IntegratedSpiral3d.curvatureToRadius(curvature0), IntegratedSpiral3d.curvatureToRadius(curvature1)),\r\n AngleSweep.createStartEndRadians(bearing0Radians, bearing1Radians),\r\n activeFractionInterval, localToWorld, spiralTypeName);\r\n if (integratedSpiral)\r\n return integratedSpiral;\r\n const radius0 = TransitionSpiral3d.curvatureToRadius(curvature0);\r\n const radius1 = TransitionSpiral3d.curvatureToRadius(curvature1);\r\n const arcLength = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(radius0, radius1,\r\n bearing1Radians - bearing0Radians);\r\n const directSpiral = DirectSpiral3d.createFromLengthAndRadius(\r\n spiralTypeName!,\r\n radius0, radius1,\r\n Angle.createRadians(bearing0Radians),\r\n Angle.createRadians (bearing1Radians),\r\n arcLength,\r\n activeFractionInterval,\r\n localToWorld);\r\n if (directSpiral)\r\n return directSpiral;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve primitive\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readCurvePrimitiveFromVariant(variant: BGFBAccessors.VariantGeometry): CurvePrimitive | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagLineSegment) {\r\n const offsetToLineSegment = variant.geometry(new BGFBAccessors.LineSegment());\r\n const offsetToCoordinates = offsetToLineSegment!.segment();\r\n return LineSegment3d.createXYZXYZ(\r\n offsetToCoordinates!.point0X(), offsetToCoordinates!.point0Y(), offsetToCoordinates!.point0Z(),\r\n offsetToCoordinates!.point1X(), offsetToCoordinates!.point1Y(), offsetToCoordinates!.point1Z());\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagEllipticArc) {\r\n const offsetToEllipticArc = variant.geometry(new BGFBAccessors.EllipticArc());\r\n const offsetToCoordinates = offsetToEllipticArc!.arc()!;\r\n return Arc3d.createXYZXYZXYZ(\r\n offsetToCoordinates.centerX(), offsetToCoordinates.centerY(), offsetToCoordinates.centerZ(),\r\n offsetToCoordinates.vector0X(), offsetToCoordinates.vector0Y(), offsetToCoordinates.vector0Z(),\r\n offsetToCoordinates.vector90X(), offsetToCoordinates.vector90Y(), offsetToCoordinates.vector90Z(),\r\n AngleSweep.createStartSweepRadians(offsetToCoordinates.startRadians(), offsetToCoordinates?.sweepRadians()));\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagLineString) {\r\n const offsetToLineString = variant.geometry(new BGFBAccessors.LineString())!;\r\n const numCoordinates = offsetToLineString.pointsLength();\r\n const result = LineString3d.create();\r\n for (let i = 0; i + 2 < numCoordinates; i += 3) {\r\n result.packedPoints.pushXYZ(offsetToLineString.points(i)!, offsetToLineString.points(i + 1)!, offsetToLineString.points(i + 2)!);\r\n }\r\n return result;\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagBsplineCurve) {\r\n const offsetToBCurve = variant.geometry(new BGFBAccessors.BsplineCurve());\r\n if (offsetToBCurve !== null)\r\n return this.readBSplineCurve(offsetToBCurve);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral) {\r\n const offsetToTransitionSpiralTable = variant.geometry(new BGFBAccessors.TransitionSpiral());\r\n if (offsetToTransitionSpiralTable !== null)\r\n return this.readTransitionSpiral(offsetToTransitionSpiralTable);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve) {\r\n const offsetToInterpolationCurveTable = variant.geometry(new BGFBAccessors.InterpolationCurve());\r\n if (offsetToInterpolationCurveTable !== null)\r\n return this.readInterpolationCurve3d(offsetToInterpolationCurveTable);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagAkimaCurve) {\r\n const offsetToAkimaCurveTable = variant.geometry(new BGFBAccessors.AkimaCurve());\r\n if (offsetToAkimaCurveTable !== null)\r\n return this.readAkimaCurve3d(offsetToAkimaCurveTable);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve primitive\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readPointStringFromVariant(variant: BGFBAccessors.VariantGeometry): PointString3d | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagPointString) {\r\n const offsetToLineString = variant.geometry(new BGFBAccessors.PointString())!;\r\n const numCoordinates = offsetToLineString.pointsLength();\r\n const result = PointString3d.create();\r\n for (let i = 0; i + 2 < numCoordinates; i += 3) {\r\n result.points.push(Point3d.create(offsetToLineString.points(i)!, offsetToLineString.points(i + 1)!, offsetToLineString.points(i + 2)!));\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Extract auxData channel data for a mesh */\r\n public readPolyfaceAuxChannelData(channelDataHeader: BGFBAccessors.PolyfaceAuxChannelData | null): AuxChannelData | undefined {\r\n if (channelDataHeader !== null) {\r\n const input = channelDataHeader.input();\r\n const values = channelDataHeader.valuesArray();\r\n if (values !== null)\r\n return new AuxChannelData(input, values);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Extract auxData channel for a mesh */\r\n public readPolyfaceAuxChannel(channelHeader: BGFBAccessors.PolyfaceAuxChannel | null): AuxChannel | undefined {\r\n if (channelHeader) {\r\n const dataType = channelHeader.dataType();\r\n const dataLength = channelHeader.dataLength();\r\n const channelDataArray: AuxChannelData[] = [];\r\n const name = channelHeader.name();\r\n const inputName = channelHeader.inputName();\r\n for (let i = 0; i < dataLength; i++) {\r\n const channelData = this.readPolyfaceAuxChannelData(channelHeader.data(i));\r\n if (channelData)\r\n channelDataArray.push(channelData);\r\n }\r\n return new AuxChannel(channelDataArray, dataType, name ? name : undefined, inputName ? inputName : undefined);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the number of logical entries in every flat data array in the AuxData */\r\n private static channelDataLength(fbAuxData: BGFBAccessors.PolyfaceAuxData): number {\r\n if (fbAuxData.channelsLength() <= 0)\r\n return 0;\r\n\r\n const fbChannel0 = nullToUndefined<BGFBAccessors.PolyfaceAuxChannel>(fbAuxData.channels(0));\r\n if (!fbChannel0)\r\n return 0;\r\n\r\n const numChannel0Data = fbChannel0.dataLength();\r\n if (numChannel0Data <= 0)\r\n return 0;\r\n\r\n const fbChannel0Data0 = nullToUndefined<BGFBAccessors.PolyfaceAuxChannelData>(fbChannel0.data(0));\r\n if (!fbChannel0Data0)\r\n return 0;\r\n\r\n const numChannelDataValues = fbChannel0Data0.valuesLength();\r\n if (numChannelDataValues <= 0)\r\n return 0;\r\n\r\n return numChannelDataValues / AuxChannel.entriesPerValue(fbChannel0.dataType());\r\n }\r\n\r\n /** Examine int array for range and zero count */\r\n private countIntArray(ints: Int32Array): { min: number, max: number, numZeroes: number } {\r\n let min = Infinity;\r\n let max = -Infinity;\r\n let numZeroes = 0;\r\n for (const i of ints) {\r\n if (min > i)\r\n min = i;\r\n if (max < i)\r\n max = i;\r\n if (0 === i)\r\n ++numZeroes;\r\n }\r\n return {min, max, numZeroes};\r\n }\r\n\r\n /**\r\n * Extract auxData for a mesh.\r\n * Typescript object format for Polyface/PolyfaceAuxData indices is 0-based, unterminated.\r\n * FlatBuffer format for Polyface/PolyfaceAuxData indices is 1-based, 0-terminated/padded.\r\n * Typescript API previously wrote FlatBuffer PolyfaceAuxData indices as 0-based, unterminated;\r\n * heuristics are used herein to identify this legacy format so it can still be read.\r\n */\r\n public readPolyfaceAuxData(fbPolyface: BGFBAccessors.Polyface | null, fbAuxData: BGFBAccessors.PolyfaceAuxData | null): PolyfaceAuxData | undefined {\r\n if (!fbPolyface || !fbAuxData)\r\n return undefined;\r\n\r\n const fbPointIndices = nullToUndefined<Int32Array>(fbPolyface.pointIndexArray());\r\n const fbAuxIndices = nullToUndefined<Int32Array>(fbAuxData.indicesArray());\r\n const numChannels = fbAuxData.channelsLength();\r\n const fbNumData = BGFBReader.channelDataLength(fbAuxData);\r\n if (!fbPointIndices || !fbPointIndices.length || !fbAuxIndices || !fbAuxIndices.length || numChannels <= 0 || fbNumData <= 0)\r\n return undefined;\r\n\r\n const numPerFace = fbPolyface.numPerFace();\r\n\r\n // HEURISTICS to detect legacy AuxData indices, previously mistakenly serialized by BGFBWriter.writePolyfaceAsFBVariantGeometry as 0-based unblocked indices\r\n let isLegacy = false;\r\n const pointIndicesPadCount = fbPointIndices.filter((index) => index === 0).length;\r\n if (numPerFace > 1) {\r\n const auxIndexCounts = this.countIntArray(fbAuxIndices);\r\n if (auxIndexCounts.max > fbNumData) // auxIndices invalid\r\n return undefined;\r\n if (auxIndexCounts.max === fbNumData) // auxIndices 1-based\r\n isLegacy = false;\r\n else if (auxIndexCounts.max <= 0 || auxIndexCounts.min < 0) // auxIndices 1-based (signed)\r\n isLegacy = false;\r\n else if (auxIndexCounts.min === 0) // auxIndices likely legacy 0-based index, but could be modern with padding\r\n isLegacy = pointIndicesPadCount !== auxIndexCounts.numZeroes;\r\n else if (auxIndexCounts.min > 0) // auxIndices likely modern without padding, but could be legacy if first datum not indexed\r\n isLegacy = pointIndicesPadCount > 0;\r\n } else {\r\n isLegacy = (fbAuxIndices.length < fbPointIndices.length) && (fbAuxIndices.length + pointIndicesPadCount === fbPointIndices.length);\r\n }\r\n if (!isLegacy && fbAuxIndices.length !== fbPointIndices.length)\r\n return undefined; // auxIndices invalid\r\n\r\n const indices: number[] = [];\r\n if (isLegacy)\r\n SerializationHelpers.announceZeroBasedIndicesWithExternalBlocking(fbAuxIndices, fbPointIndices, numPerFace, (i0: number) => { indices.push(i0); });\r\n else\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(fbAuxIndices, numPerFace, (i0: number) => { indices.push(i0); });\r\n if (indices.length + pointIndicesPadCount !== fbPointIndices.length)\r\n return undefined;\r\n const maxIndex = Math.max(...indices);\r\n\r\n const channels: AuxChannel[] = [];\r\n for (let i = 0; i < numChannels; i++) {\r\n const channelHeader = fbAuxData.channels(i);\r\n const channelContent = this.readPolyfaceAuxChannel(channelHeader);\r\n if (channelContent) {\r\n if (maxIndex >= channelContent.valueCount)\r\n return undefined; // invalid index\r\n channels.push(channelContent);\r\n }\r\n }\r\n if (!channels.length)\r\n return undefined;\r\n\r\n return new PolyfaceAuxData(channels, indices);\r\n }\r\n\r\n /** Extract tagged numeric data for a mesh */\r\n public readTaggedNumericData(accessor: BGFBAccessors.TaggedNumericData | undefined): TaggedNumericData | undefined {\r\n if (accessor) {\r\n const taggedNumericData = new TaggedNumericData(accessor.tagA(), accessor.tagB());\r\n const intDataArray = nullToUndefined<Int32Array>(accessor.intDataArray());\r\n const doubleDataArray = nullToUndefined<Float64Array>(accessor.doubleDataArray());\r\n if (intDataArray) {\r\n taggedNumericData.intData = [];\r\n for (const c of intDataArray)\r\n taggedNumericData.intData.push(c);\r\n\r\n }\r\n if (doubleDataArray) {\r\n taggedNumericData.doubleData = [];\r\n for (const c of doubleDataArray)\r\n taggedNumericData.doubleData.push(c);\r\n }\r\n return taggedNumericData;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a mesh\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readPolyfaceFromVariant(variant: BGFBAccessors.VariantGeometry): IndexedPolyface | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagPolyface) {\r\n const polyfaceHeader = variant.geometry(new BGFBAccessors.Polyface());\r\n if (polyfaceHeader) {\r\n const twoSided = polyfaceHeader.twoSided();\r\n const expectedClosure = polyfaceHeader.expectedClosure();\r\n const meshStyle = polyfaceHeader.meshStyle();\r\n const numPerFace = polyfaceHeader.numPerFace();\r\n\r\n const pointF64 = nullToUndefined<Float64Array>(polyfaceHeader.pointArray());\r\n const paramF64 = nullToUndefined<Float64Array>(polyfaceHeader.paramArray());\r\n const normalF64 = nullToUndefined<Float64Array>(polyfaceHeader.normalArray());\r\n const intColorU32 = nullToUndefined<Uint32Array>(polyfaceHeader.intColorArray());\r\n\r\n const pointIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.pointIndexArray());\r\n const paramIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.paramIndexArray());\r\n const normalIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.normalIndexArray());\r\n const colorIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.colorIndexArray());\r\n const taggedNumericDataOffset = polyfaceHeader.taggedNumericData();\r\n\r\n assert(meshStyle === 1, \"Unrecognized flatbuffer mesh style\");\r\n\r\n // The flatbuffer data is one based.\r\n // If numPerFace is less than 2, facets are variable size and zero terminated\r\n // If numPerFace is 2 or more, indices are blocked\r\n if (meshStyle === 1 && pointF64 && pointIndexI32) {\r\n const polyface = IndexedPolyface.create();\r\n polyface.twoSided = twoSided;\r\n polyface.expectedClosure = expectedClosure;\r\n\r\n if (normalF64 && normalIndexI32) {\r\n for (let i = 0; i + 2 < normalF64.length; i += 3)\r\n polyface.addNormalXYZ(normalF64[i], normalF64[i + 1], normalF64[i + 2]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(normalIndexI32, numPerFace,\r\n (i: number) => { polyface.addNormalIndex(i); });\r\n }\r\n if (paramF64 && paramIndexI32) {\r\n for (let i = 0; i + 1 < paramF64.length; i += 2)\r\n polyface.addParamUV(paramF64[i], paramF64[i + 1]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(paramIndexI32, numPerFace,\r\n (i: number) => { polyface.addParamIndex(i); });\r\n }\r\n if (intColorU32 && colorIndexI32) {\r\n for (const c of intColorU32)\r\n polyface.addColor(c);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(colorIndexI32, numPerFace,\r\n (i: number) => { polyface.addColorIndex(i); });\r\n }\r\n\r\n for (let i = 0; i + 2 < pointF64.length; i += 3)\r\n polyface.addPointXYZ(pointF64[i], pointF64[i + 1], pointF64[i + 2]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(pointIndexI32, numPerFace,\r\n (i: number, v?: boolean) => { polyface.addPointIndex(i, v); },\r\n () => { polyface.terminateFacet(false); });\r\n\r\n if (!polyface.validateAllIndices())\r\n return undefined;\r\n\r\n polyface.data.auxData = this.readPolyfaceAuxData(polyfaceHeader, polyfaceHeader.auxData());\r\n\r\n if (taggedNumericDataOffset) {\r\n const taggedNumericDataAccessor = nullToUndefined<BGFBAccessors.TaggedNumericData>(taggedNumericDataOffset);\r\n if (taggedNumericDataAccessor !== undefined) {\r\n const taggedNumericData = this.readTaggedNumericData(taggedNumericDataAccessor);\r\n if (taggedNumericData !== undefined)\r\n polyface.data.setTaggedNumericData(taggedNumericData);\r\n }\r\n }\r\n return polyface;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n public readCurveCollectionFromCurveVectorTable(cvTable: BGFBAccessors.CurveVector): CurveCollection {\r\n const numChildren = cvTable.curvesLength();\r\n const collectionType = cvTable.type();\r\n const collection = createTypedCurveCollection(collectionType);\r\n for (let i = 0; i < numChildren; i++) {\r\n const childOffset = cvTable.curves(i);\r\n if (childOffset !== null) {\r\n const child = this.readCurvePrimitiveFromVariant(childOffset);\r\n if (child)\r\n collection.tryAddChild(child);\r\n else {\r\n const childCollection = this.readCurveCollectionFromVariantGeometry(childOffset);\r\n if (childCollection)\r\n collection.tryAddChild(childCollection);\r\n }\r\n }\r\n }\r\n return collection;\r\n }\r\n /**\r\n * Extract a curve collection\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readCurveCollectionFromVariantGeometry(variant: BGFBAccessors.VariantGeometry): CurveCollection | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagCurveVector) {\r\n const cvTable = variant.geometry(new BGFBAccessors.CurveVector())!;\r\n return this.readCurveCollectionFromCurveVectorTable(cvTable);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve collection\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readSolidPrimitiveFromVariant(variant: BGFBAccessors.VariantGeometry): SolidPrimitive | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnBox) {\r\n const header = variant.geometry(new BGFBAccessors.DgnBox());\r\n const detail = header!.detail()!;\r\n return Box.createDgnBox(\r\n Point3d.create(detail.baseOriginX(), detail.baseOriginY(), detail.baseOriginZ()),\r\n Vector3d.create(detail.vectorXX(), detail.vectorXY(), detail.vectorXZ()),\r\n Vector3d.create(detail.vectorYX(), detail.vectorYY(), detail.vectorYZ()),\r\n Point3d.create(detail.topOriginX(), detail.topOriginY(), detail.topOriginZ()),\r\n detail.baseX(), detail.baseY(), detail.topX(), detail.topY(),\r\n detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnSphere) {\r\n const header = variant.geometry(new BGFBAccessors.DgnSphere());\r\n const detail = header!.detail()!;\r\n const lToWDetail = detail.localToWorld()!;\r\n const localToWorld = Transform.createRowValues(\r\n lToWDetail.axx(), lToWDetail.axy(), lToWDetail.axz(), lToWDetail.axw(),\r\n lToWDetail.ayx(), lToWDetail.ayy(), lToWDetail.ayz(), lToWDetail.ayw(),\r\n lToWDetail.azx(), lToWDetail.azy(), lToWDetail.azz(), lToWDetail.azw());\r\n return Sphere.createEllipsoid(localToWorld,\r\n AngleSweep.createStartSweepRadians(detail.startLatitudeRadians(), detail.latitudeSweepRadians()),\r\n detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnCone) {\r\n const header = variant.geometry(new BGFBAccessors.DgnCone());\r\n const detail = header!.detail()!;\r\n const centerA = Point3d.create(detail.centerAX(), detail.centerAY(), detail.centerAZ());\r\n const centerB = Point3d.create(detail.centerBX(), detail.centerBY(), detail.centerBZ());\r\n const vector0 = Vector3d.create(detail.vector0X(), detail.vector0Y(), detail.vector0Z());\r\n const vector90 = Vector3d.create(detail.vector90X(), detail.vector90Y(), detail.vector90Z());\r\n const radiusA = detail.radiusA();\r\n const radiusB = detail.radiusB();\r\n return Cone.createBaseAndTarget(centerA, centerB, vector0, vector90, radiusA, radiusB, detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe) {\r\n const header = variant.geometry(new BGFBAccessors.DgnTorusPipe())!;\r\n const detail = header.detail()!;\r\n const center = Point3d.create(detail.centerX(), detail.centerY(), detail.centerZ());\r\n const vectorX = Vector3d.create(detail.vectorXX(), detail.vectorXY(), detail.vectorXZ());\r\n const vectorY = Vector3d.create(detail.vectorYX(), detail.vectorYY(), detail.vectorYZ());\r\n const sweepRadians = detail.sweepRadians();\r\n const majorRadius = detail.majorRadius();\r\n const minorRadius = detail.minorRadius();\r\n return TorusPipe.createDgnTorusPipe(center, vectorX, vectorY, majorRadius, minorRadius, Angle.createRadians(sweepRadians), detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion) {\r\n const header = variant.geometry(new BGFBAccessors.DgnExtrusion())!;\r\n const dVector = new BGFBAccessors.DVector3d();\r\n header.extrusionVector(dVector);\r\n const extrusionVector = Vector3d.create(dVector.x(), dVector.y(), dVector.z());\r\n const baseCurve = header.baseCurve();\r\n if (baseCurve !== null) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(baseCurve);\r\n return LinearSweep.create(contour, extrusionVector, header.capped());\r\n }\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep) {\r\n const header = variant.geometry(new BGFBAccessors.DgnRotationalSweep())!;\r\n const dAxis = new BGFBAccessors.DRay3d();\r\n header.axis(dAxis);\r\n const axis = Ray3d.createXYZUVW(dAxis.x(), dAxis.y(), dAxis.z(), dAxis.ux(), dAxis.uy(), dAxis.uz());\r\n const sweepAngle = Angle.createRadians(header.sweepRadians());\r\n // const numVRules = header.numVRules();\r\n const baseCurve = header.baseCurve();\r\n if (baseCurve !== null) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(baseCurve);\r\n return RotationalSweep.create(contour, axis, sweepAngle, header.capped());\r\n }\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep) {\r\n const header = variant.geometry(new BGFBAccessors.DgnRuledSweep())!;\r\n const numCurves = header.curvesLength();\r\n const contours: CurveCollection[] = [];\r\n for (let i = 0; i < numCurves; i++) {\r\n const contourTable = header.curves(i);\r\n if (contourTable) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(contourTable);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n }\r\n if (contours.length > 0) {\r\n return RuledSweep.create(contours, header.capped());\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract any geometry type or array of geometry.\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readGeometryQueryFromVariant(variant: BGFBAccessors.VariantGeometry): GeometryQuery | GeometryQuery[] | undefined {\r\n const rootType = variant.geometryType();\r\n switch (rootType) {\r\n case BGFBAccessors.VariantGeometryUnion.tagLineSegment:\r\n case BGFBAccessors.VariantGeometryUnion.tagLineString:\r\n case BGFBAccessors.VariantGeometryUnion.tagEllipticArc:\r\n case BGFBAccessors.VariantGeometryUnion.tagBsplineCurve:\r\n case BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral:\r\n case BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve:\r\n case BGFBAccessors.VariantGeometryUnion.tagAkimaCurve:\r\n {\r\n return this.readCurvePrimitiveFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagCurveVector:\r\n {\r\n return this.readCurveCollectionFromVariantGeometry(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagPolyface:\r\n {\r\n return this.readPolyfaceFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnBox:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnCone:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnSphere:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep:\r\n {\r\n return this.readSolidPrimitiveFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagVectorOfVariantGeometry:\r\n {\r\n const geometry: GeometryQuery[] = [];\r\n const offsetToVectorOfVariantGeometry = variant.geometry(new BGFBAccessors.VectorOfVariantGeometry());\r\n for (let i = 0; i < offsetToVectorOfVariantGeometry!.membersLength(); i++) {\r\n const child = offsetToVectorOfVariantGeometry!.members(i);\r\n if (child !== null) {\r\n const childGeometry = this.readGeometryQueryFromVariant(child);\r\n if (childGeometry instanceof GeometryQuery) {\r\n geometry.push(childGeometry);\r\n } else if (Array.isArray(childGeometry)) {\r\n geometry.push(...childGeometry);\r\n }\r\n }\r\n }\r\n return geometry;\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagBsplineSurface: {\r\n return this.readBSplineSurfaceFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagPointString:\r\n {\r\n return this.readPointStringFromVariant(variant);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Deserialize bytes from a flatbuffer.\r\n * @param justTheBytes FlatBuffer bytes as created by BGFBWriter.createFlatBuffer (g);\r\n */\r\n public static bytesToGeometry(theBytes: Uint8Array, signature?: Uint8Array): GeometryQuery | GeometryQuery[] | undefined {\r\n const newByteBuffer = new flatbuffers.ByteBuffer(theBytes);\r\n if (signature) {\r\n if (theBytes.length < signature.length)\r\n return undefined;\r\n for (let i = 0; i < signature.length; i++)\r\n if (theBytes[i] !== signature[i])\r\n return undefined;\r\n newByteBuffer.setPosition(signature.length);\r\n }\r\n const root = BGFBAccessors.VariantGeometry.getRootAsVariantGeometry(newByteBuffer);\r\n const reader = new BGFBReader();\r\n return reader.readGeometryQueryFromVariant(root);\r\n }\r\n\r\n}\r\n/**\r\n * if data is \"null\" (the deprecated javascript idiom!) return undefined. Otherwise return the data as its own type.\r\n * @param data\r\n */\r\nfunction nullToUndefined<T>(data: any): T | undefined {\r\n if (data === null)\r\n return undefined;\r\n return data;\r\n}\r\n\r\nfunction createTypedCurveCollection(collectionType: number): CurveCollection {\r\n if (collectionType === 1) return new Path();\r\n if (collectionType === 2 || collectionType === 3) return new Loop();\r\n if (collectionType === 4) return new ParityRegion();\r\n if (collectionType === 5) return new UnionRegion();\r\n return new BagOfCurves();\r\n}\r\n/**\r\n * mappings between typescript spiral type strings and native integers.\r\n * @internal\r\n */\r\nexport class DgnSpiralTypeQueries {\r\n // remark: this is the full list based on native DSpiral2dBase.h.\r\n // This does not guarantee all types are supported.\r\n private static spiralTypeCodeMap = [\r\n [10, \"clothoid\"],\r\n [11, \"bloss\"],\r\n [12, \"biquadratic\"],\r\n [13, \"cosine\"],\r\n [14, \"sine\"],\r\n [15, \"Viennese\"],\r\n [16, \"weightedViennese\"],\r\n\r\n [50, \"WesternAustralian\"],\r\n [51, \"Czech\"],\r\n [52, \"AustralianRailCorp\"],\r\n [53, \"Italian\"],\r\n [54, \"PolishCubic\"],\r\n [55, \"Arema\"],\r\n [56, \"MXCubicAlongArc\"],\r\n [57, \"MXCubicAlongTangent\"],\r\n [58, \"ChineseCubic\"],\r\n [60, \"HalfCosine\"],\r\n [61, \"JapaneseCubic\"],\r\n ];\r\n /** Convert native integer type (e.g. from flatbuffer) to typescript string */\r\n public static typeCodeToString(typeCode: number): string | undefined {\r\n for (const entry of DgnSpiralTypeQueries.spiralTypeCodeMap) {\r\n if (entry[0] === typeCode)\r\n return entry[1] as string;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Convert typescript string to native integer type */\r\n public static stringToTypeCode(s: string, defaultToClothoid: boolean = true): number | undefined {\r\n for (const entry of DgnSpiralTypeQueries.spiralTypeCodeMap) {\r\n if (Geometry.equalStringNoCase(s, entry[1] as string))\r\n return entry[0] as number;\r\n }\r\n return defaultToClothoid ? 10 : undefined;\r\n }\r\n /** Ask if the indicated type code is a \"direct\" spiral */\r\n public static isDirectSpiralType(typeCode: number): boolean {\r\n return typeCode >= 50;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BGFBReader.js","sourceRoot":"","sources":["../../../src/serialization/BGFBReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { flatbuffers } from \"flatbuffers\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AkimaCurve3d, AkimaCurve3dOptions } from \"../bspline/AkimaCurve3d\";\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d, InterpolationCurve3dOptions } from \"../bspline/InterpolationCurve3d\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { PointString3d } from \"../curve/PointString3d\";\r\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\r\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray, Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { AuxChannel, AuxChannelData, PolyfaceAuxData } from \"../polyface/AuxData\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\nimport { BGFBAccessors } from \"./BGFBAccessors\";\r\nimport { SerializationHelpers } from \"./SerializationHelpers\";\r\n\r\n/** * Context to write to a flatbuffer blob.\r\n * * This class is internal.\r\n * * Public access is through BentleyGeometryFlatBuffer.geometryToBytes()\r\n * @internal\r\n */\r\nexport class BGFBReader {\r\n public constructor() {\r\n }\r\n /**\r\n * Extract a bspline surface\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readBSplineSurfaceFromVariant(variantHeader: BGFBAccessors.VariantGeometry): BSplineSurface3d | BSplineSurface3dH | undefined {\r\n let newSurface: BSplineSurface3d | BSplineSurface3dH | undefined;\r\n const geometryType = variantHeader.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagBsplineSurface) {\r\n const bsurfHeader = variantHeader.geometry(new BGFBAccessors.BsplineSurface());\r\n if (bsurfHeader !== null) {\r\n const orderU = bsurfHeader.orderU();\r\n const orderV = bsurfHeader.orderV();\r\n const numPolesU = bsurfHeader.numPolesU();\r\n const numPolesV = bsurfHeader.numPolesV();\r\n const xyzArray = bsurfHeader.polesArray();\r\n const knotArrayU = bsurfHeader.knotsUArray();\r\n const knotArrayV = bsurfHeader.knotsVArray();\r\n const weightArray = bsurfHeader.weightsArray();\r\n const closedU = bsurfHeader.closedU();\r\n const closedV = bsurfHeader.closedV();\r\n\r\n if (xyzArray !== null && knotArrayU !== null && knotArrayV !== null) {\r\n const myData = SerializationHelpers.createBSplineSurfaceData(xyzArray, 3, knotArrayU, numPolesU, orderU, knotArrayV, numPolesV, orderV);\r\n if (weightArray !== null)\r\n myData.weights = weightArray;\r\n if (closedU)\r\n myData.uParams.closed = true;\r\n if (closedV)\r\n myData.vParams.closed = true;\r\n\r\n if (SerializationHelpers.Import.prepareBSplineSurfaceData(myData, {jsonPoles: false})) {\r\n if (undefined === myData.weights)\r\n newSurface = BSplineSurface3d.create(myData.poles as Float64Array, myData.uParams.numPoles, myData.uParams.order, myData.uParams.knots, myData.vParams.numPoles, myData.vParams.order, myData.vParams.knots);\r\n else\r\n newSurface = BSplineSurface3dH.create(myData.poles as Float64Array, myData.weights as Float64Array, myData.uParams.numPoles, myData.uParams.order, myData.uParams.knots, myData.vParams.numPoles, myData.vParams.order, myData.vParams.knots);\r\n\r\n if (undefined !== newSurface) {\r\n if (undefined !== myData.uParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.uDirection, myData.uParams.wrapMode);\r\n if (undefined !== myData.vParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.vDirection, myData.vParams.wrapMode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return newSurface;\r\n }\r\n\r\n /**\r\n * Extract an interpolating curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readInterpolationCurve3d(header: BGFBAccessors.InterpolationCurve): InterpolationCurve3d | undefined {\r\n const xyzArray = header.fitPointsArray();\r\n if (xyzArray instanceof Float64Array){\r\n const knots = header.knotsArray();\r\n const options = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(xyzArray), knots ? NumberArray.create(knots) : undefined);\r\n const startTangent = header.startTangent();\r\n const endTangent = header.endTangent();\r\n options.captureOptionalProps(\r\n header.order(),\r\n header.closed(),\r\n header.isChordLenKnots(),\r\n header.isColinearTangents(),\r\n header.isChordLenTangents(),\r\n header.isNaturalTangents (),\r\n startTangent !== null ? Vector3d.create(startTangent.x(), startTangent.y(), startTangent.z()) : undefined,\r\n endTangent !== null ? Vector3d.create(endTangent.x(), endTangent.y(), endTangent.z()) : undefined);\r\n return InterpolationCurve3d.createCapture(options);\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Extract an akima curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readAkimaCurve3d(header: BGFBAccessors.AkimaCurve): AkimaCurve3d | undefined {\r\n const xyzArray = header.pointsArray();\r\n if (xyzArray instanceof Float64Array){\r\n const options = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(xyzArray));\r\n return AkimaCurve3d.createCapture(options);\r\n }\r\nreturn undefined;\r\n}\r\n/**\r\n * Extract a bspline curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readBSplineCurve(header: BGFBAccessors.BsplineCurve): BSplineCurve3d | BSplineCurve3dH | undefined {\r\n let newCurve: BSplineCurve3d | BSplineCurve3dH | undefined;\r\n const order = header.order();\r\n const xyzArray = header.polesArray();\r\n const knots = header.knotsArray();\r\n const weightsArray = header.weightsArray();\r\n const closed = header.closed();\r\n\r\n if (xyzArray !== null && knots !== null) {\r\n const numPoles = Math.floor(xyzArray.length / 3);\r\n const myData = SerializationHelpers.createBSplineCurveData(xyzArray, 3, knots, numPoles, order);\r\n if (closed)\r\n myData.params.closed = true;\r\n\r\n if (weightsArray === null) {\r\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData))\r\n newCurve = BSplineCurve3d.create(myData.poles, myData.params.knots, myData.params.order);\r\n } else {\r\n myData.weights = weightsArray;\r\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData, {jsonPoles: false}))\r\n newCurve = BSplineCurve3dH.create({ xyz: myData.poles as Float64Array, weights: myData.weights }, myData.params.knots, myData.params.order);\r\n }\r\n\r\n if (undefined !== newCurve) {\r\n if (undefined !== myData.params.wrapMode)\r\n newCurve.setWrappable(myData.params.wrapMode);\r\n }\r\n }\r\n return newCurve;\r\n }\r\n /**\r\n * Extract a bspline curve\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readTransitionSpiral(header: BGFBAccessors.TransitionSpiral): TransitionSpiral3d | undefined {\r\n const detailHeader = header.detail();\r\n if (detailHeader) {\r\n const directDetailHeader = header.directDetail();\r\n const _extraDataArray = header.extraDataArray();\r\n const spiralTypeName = DgnSpiralTypeQueries.typeCodeToString(detailHeader.spiralType());\r\n const curvature0 = detailHeader.curvature0();\r\n const curvature1 = detailHeader.curvature1();\r\n const bearing0Radians = detailHeader.bearing0Radians();\r\n const bearing1Radians = detailHeader.bearing1Radians();\r\n const fbTransform = detailHeader.transform();\r\n const localToWorld = fbTransform ? Transform.createRowValues(\r\n fbTransform.axx(), fbTransform.axy(), fbTransform.axz(), fbTransform.axw(),\r\n fbTransform.ayx(), fbTransform.ayy(), fbTransform.ayz(), fbTransform.ayw(),\r\n fbTransform.azx(), fbTransform.azy(), fbTransform.azz(), fbTransform.azw()) :\r\n Transform.createIdentity();\r\n\r\n const activeFractionInterval = Segment1d.create(detailHeader.fractionA(),\r\n detailHeader.fractionB());\r\n if (!directDetailHeader) {\r\n const integratedSpiral = IntegratedSpiral3d.createRadiusRadiusBearingBearing(\r\n Segment1d.create(IntegratedSpiral3d.curvatureToRadius(curvature0), IntegratedSpiral3d.curvatureToRadius(curvature1)),\r\n AngleSweep.createStartEndRadians(bearing0Radians, bearing1Radians),\r\n activeFractionInterval, localToWorld, spiralTypeName);\r\n if (integratedSpiral)\r\n return integratedSpiral;\r\n const radius0 = TransitionSpiral3d.curvatureToRadius(curvature0);\r\n const radius1 = TransitionSpiral3d.curvatureToRadius(curvature1);\r\n const arcLength = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(radius0, radius1,\r\n bearing1Radians - bearing0Radians);\r\n const directSpiral = DirectSpiral3d.createFromLengthAndRadius(\r\n spiralTypeName!,\r\n radius0, radius1,\r\n Angle.createRadians(bearing0Radians),\r\n Angle.createRadians (bearing1Radians),\r\n arcLength,\r\n activeFractionInterval,\r\n localToWorld);\r\n if (directSpiral)\r\n return directSpiral;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve primitive\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readCurvePrimitiveFromVariant(variant: BGFBAccessors.VariantGeometry): CurvePrimitive | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagLineSegment) {\r\n const offsetToLineSegment = variant.geometry(new BGFBAccessors.LineSegment());\r\n const offsetToCoordinates = offsetToLineSegment!.segment();\r\n return LineSegment3d.createXYZXYZ(\r\n offsetToCoordinates!.point0X(), offsetToCoordinates!.point0Y(), offsetToCoordinates!.point0Z(),\r\n offsetToCoordinates!.point1X(), offsetToCoordinates!.point1Y(), offsetToCoordinates!.point1Z());\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagEllipticArc) {\r\n const offsetToEllipticArc = variant.geometry(new BGFBAccessors.EllipticArc());\r\n const offsetToCoordinates = offsetToEllipticArc!.arc()!;\r\n return Arc3d.createXYZXYZXYZ(\r\n offsetToCoordinates.centerX(), offsetToCoordinates.centerY(), offsetToCoordinates.centerZ(),\r\n offsetToCoordinates.vector0X(), offsetToCoordinates.vector0Y(), offsetToCoordinates.vector0Z(),\r\n offsetToCoordinates.vector90X(), offsetToCoordinates.vector90Y(), offsetToCoordinates.vector90Z(),\r\n AngleSweep.createStartSweepRadians(offsetToCoordinates.startRadians(), offsetToCoordinates?.sweepRadians()));\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagLineString) {\r\n const offsetToLineString = variant.geometry(new BGFBAccessors.LineString())!;\r\n const numCoordinates = offsetToLineString.pointsLength();\r\n const result = LineString3d.create();\r\n for (let i = 0; i + 2 < numCoordinates; i += 3) {\r\n result.packedPoints.pushXYZ(offsetToLineString.points(i)!, offsetToLineString.points(i + 1)!, offsetToLineString.points(i + 2)!);\r\n }\r\n return result;\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagBsplineCurve) {\r\n const offsetToBCurve = variant.geometry(new BGFBAccessors.BsplineCurve());\r\n if (offsetToBCurve !== null)\r\n return this.readBSplineCurve(offsetToBCurve);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral) {\r\n const offsetToTransitionSpiralTable = variant.geometry(new BGFBAccessors.TransitionSpiral());\r\n if (offsetToTransitionSpiralTable !== null)\r\n return this.readTransitionSpiral(offsetToTransitionSpiralTable);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve) {\r\n const offsetToInterpolationCurveTable = variant.geometry(new BGFBAccessors.InterpolationCurve());\r\n if (offsetToInterpolationCurveTable !== null)\r\n return this.readInterpolationCurve3d(offsetToInterpolationCurveTable);\r\n } else if (geometryType === BGFBAccessors.VariantGeometryUnion.tagAkimaCurve) {\r\n const offsetToAkimaCurveTable = variant.geometry(new BGFBAccessors.AkimaCurve());\r\n if (offsetToAkimaCurveTable !== null)\r\n return this.readAkimaCurve3d(offsetToAkimaCurveTable);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve primitive\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readPointStringFromVariant(variant: BGFBAccessors.VariantGeometry): PointString3d | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagPointString) {\r\n const offsetToLineString = variant.geometry(new BGFBAccessors.PointString())!;\r\n const numCoordinates = offsetToLineString.pointsLength();\r\n const result = PointString3d.create();\r\n for (let i = 0; i + 2 < numCoordinates; i += 3) {\r\n result.points.push(Point3d.create(offsetToLineString.points(i)!, offsetToLineString.points(i + 1)!, offsetToLineString.points(i + 2)!));\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Extract auxData channel data for a mesh */\r\n public readPolyfaceAuxChannelData(channelDataHeader: BGFBAccessors.PolyfaceAuxChannelData | null): AuxChannelData | undefined {\r\n if (channelDataHeader !== null) {\r\n const input = channelDataHeader.input();\r\n const values = channelDataHeader.valuesArray();\r\n if (values !== null)\r\n return new AuxChannelData(input, values);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Extract auxData channel for a mesh */\r\n public readPolyfaceAuxChannel(channelHeader: BGFBAccessors.PolyfaceAuxChannel | null): AuxChannel | undefined {\r\n if (channelHeader) {\r\n const dataType = channelHeader.dataType();\r\n const dataLength = channelHeader.dataLength();\r\n const channelDataArray: AuxChannelData[] = [];\r\n const name = channelHeader.name();\r\n const inputName = channelHeader.inputName();\r\n for (let i = 0; i < dataLength; i++) {\r\n const channelData = this.readPolyfaceAuxChannelData(channelHeader.data(i));\r\n if (channelData)\r\n channelDataArray.push(channelData);\r\n }\r\n return new AuxChannel(channelDataArray, dataType, name ? name : undefined, inputName ? inputName : undefined);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the number of logical entries in every flat data array in the AuxData */\r\n private static channelDataLength(fbAuxData: BGFBAccessors.PolyfaceAuxData): number {\r\n if (fbAuxData.channelsLength() <= 0)\r\n return 0;\r\n\r\n const fbChannel0 = nullToUndefined<BGFBAccessors.PolyfaceAuxChannel>(fbAuxData.channels(0));\r\n if (!fbChannel0)\r\n return 0;\r\n\r\n const numChannel0Data = fbChannel0.dataLength();\r\n if (numChannel0Data <= 0)\r\n return 0;\r\n\r\n const fbChannel0Data0 = nullToUndefined<BGFBAccessors.PolyfaceAuxChannelData>(fbChannel0.data(0));\r\n if (!fbChannel0Data0)\r\n return 0;\r\n\r\n const numChannelDataValues = fbChannel0Data0.valuesLength();\r\n if (numChannelDataValues <= 0)\r\n return 0;\r\n\r\n return numChannelDataValues / AuxChannel.entriesPerValue(fbChannel0.dataType());\r\n }\r\n\r\n /** Examine int array for range and zero count */\r\n private countIntArray(ints: Int32Array): { min: number, max: number, numZeroes: number } {\r\n let min = Infinity;\r\n let max = -Infinity;\r\n let numZeroes = 0;\r\n for (const i of ints) {\r\n if (min > i)\r\n min = i;\r\n if (max < i)\r\n max = i;\r\n if (0 === i)\r\n ++numZeroes;\r\n }\r\n return {min, max, numZeroes};\r\n }\r\n\r\n /**\r\n * Extract auxData for a mesh.\r\n * Typescript object format for Polyface/PolyfaceAuxData indices is 0-based, unterminated.\r\n * FlatBuffer format for Polyface/PolyfaceAuxData indices is 1-based, 0-terminated/padded.\r\n * Typescript API previously wrote FlatBuffer PolyfaceAuxData indices as 0-based, unterminated;\r\n * heuristics are used herein to identify this legacy format so it can still be read.\r\n */\r\n public readPolyfaceAuxData(fbPolyface: BGFBAccessors.Polyface | null, fbAuxData: BGFBAccessors.PolyfaceAuxData | null): PolyfaceAuxData | undefined {\r\n if (!fbPolyface || !fbAuxData)\r\n return undefined;\r\n\r\n const fbPointIndices = nullToUndefined<Int32Array>(fbPolyface.pointIndexArray());\r\n const fbAuxIndices = nullToUndefined<Int32Array>(fbAuxData.indicesArray());\r\n const numChannels = fbAuxData.channelsLength();\r\n const fbNumData = BGFBReader.channelDataLength(fbAuxData);\r\n if (!fbPointIndices || !fbPointIndices.length || !fbAuxIndices || !fbAuxIndices.length || numChannels <= 0 || fbNumData <= 0)\r\n return undefined;\r\n\r\n const numPerFace = fbPolyface.numPerFace();\r\n\r\n // HEURISTICS to detect legacy AuxData indices, previously mistakenly serialized by BGFBWriter.writePolyfaceAsFBVariantGeometry as 0-based unblocked indices\r\n let isLegacy = false;\r\n const pointIndicesPadCount = fbPointIndices.filter((index) => index === 0).length;\r\n if (numPerFace > 1) {\r\n const auxIndexCounts = this.countIntArray(fbAuxIndices);\r\n if (auxIndexCounts.max > fbNumData) // auxIndices invalid\r\n return undefined;\r\n if (auxIndexCounts.max === fbNumData) // auxIndices 1-based\r\n isLegacy = false;\r\n else if (auxIndexCounts.max <= 0 || auxIndexCounts.min < 0) // auxIndices 1-based (signed)\r\n isLegacy = false;\r\n else if (auxIndexCounts.min === 0) // auxIndices likely legacy 0-based index, but could be modern with padding\r\n isLegacy = pointIndicesPadCount !== auxIndexCounts.numZeroes;\r\n else if (auxIndexCounts.min > 0) // auxIndices likely modern without padding, but could be legacy if first datum not indexed\r\n isLegacy = pointIndicesPadCount > 0;\r\n } else {\r\n isLegacy = (fbAuxIndices.length < fbPointIndices.length) && (fbAuxIndices.length + pointIndicesPadCount === fbPointIndices.length);\r\n }\r\n if (!isLegacy && fbAuxIndices.length !== fbPointIndices.length)\r\n return undefined; // auxIndices invalid\r\n\r\n const indices: number[] = [];\r\n if (isLegacy)\r\n SerializationHelpers.announceZeroBasedIndicesWithExternalBlocking(fbAuxIndices, fbPointIndices, numPerFace, (i0: number) => { indices.push(i0); });\r\n else\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(fbAuxIndices, numPerFace, (i0: number) => { indices.push(i0); });\r\n if (indices.length + pointIndicesPadCount !== fbPointIndices.length)\r\n return undefined;\r\n const maxIndex = Math.max(...indices);\r\n\r\n const channels: AuxChannel[] = [];\r\n for (let i = 0; i < numChannels; i++) {\r\n const channelHeader = fbAuxData.channels(i);\r\n const channelContent = this.readPolyfaceAuxChannel(channelHeader);\r\n if (channelContent) {\r\n if (maxIndex >= channelContent.valueCount)\r\n return undefined; // invalid index\r\n channels.push(channelContent);\r\n }\r\n }\r\n if (!channels.length)\r\n return undefined;\r\n\r\n return new PolyfaceAuxData(channels, indices);\r\n }\r\n\r\n /** Extract tagged numeric data for a mesh */\r\n public readTaggedNumericData(accessor: BGFBAccessors.TaggedNumericData | undefined): TaggedNumericData | undefined {\r\n if (accessor) {\r\n const taggedNumericData = new TaggedNumericData(accessor.tagA(), accessor.tagB());\r\n const intDataArray = nullToUndefined<Int32Array>(accessor.intDataArray());\r\n const doubleDataArray = nullToUndefined<Float64Array>(accessor.doubleDataArray());\r\n if (intDataArray) {\r\n taggedNumericData.intData = [];\r\n for (const c of intDataArray)\r\n taggedNumericData.intData.push(c);\r\n\r\n }\r\n if (doubleDataArray) {\r\n taggedNumericData.doubleData = [];\r\n for (const c of doubleDataArray)\r\n taggedNumericData.doubleData.push(c);\r\n }\r\n return taggedNumericData;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a mesh\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readPolyfaceFromVariant(variant: BGFBAccessors.VariantGeometry): IndexedPolyface | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagPolyface) {\r\n const polyfaceHeader = variant.geometry(new BGFBAccessors.Polyface());\r\n if (polyfaceHeader) {\r\n const twoSided = polyfaceHeader.twoSided();\r\n const expectedClosure = polyfaceHeader.expectedClosure();\r\n const meshStyle = polyfaceHeader.meshStyle();\r\n const numPerFace = polyfaceHeader.numPerFace();\r\n\r\n const pointF64 = nullToUndefined<Float64Array>(polyfaceHeader.pointArray());\r\n const paramF64 = nullToUndefined<Float64Array>(polyfaceHeader.paramArray());\r\n const normalF64 = nullToUndefined<Float64Array>(polyfaceHeader.normalArray());\r\n const intColorU32 = nullToUndefined<Uint32Array>(polyfaceHeader.intColorArray());\r\n\r\n const pointIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.pointIndexArray());\r\n const paramIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.paramIndexArray());\r\n const normalIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.normalIndexArray());\r\n const colorIndexI32 = nullToUndefined<Int32Array>(polyfaceHeader.colorIndexArray());\r\n const taggedNumericDataOffset = polyfaceHeader.taggedNumericData();\r\n\r\n assert(meshStyle === 1, \"Unrecognized flatbuffer mesh style\");\r\n\r\n // The flatbuffer data is one based.\r\n // If numPerFace is less than 2, facets are variable size and zero terminated\r\n // If numPerFace is 2 or more, indices are blocked\r\n if (meshStyle === 1 && pointF64 && pointIndexI32) {\r\n const polyface = IndexedPolyface.create();\r\n polyface.twoSided = twoSided;\r\n polyface.expectedClosure = expectedClosure;\r\n\r\n if (normalF64 && normalIndexI32) {\r\n for (let i = 0; i + 2 < normalF64.length; i += 3)\r\n polyface.addNormalXYZ(normalF64[i], normalF64[i + 1], normalF64[i + 2]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(normalIndexI32, numPerFace,\r\n (i: number) => { polyface.addNormalIndex(i); });\r\n }\r\n if (paramF64 && paramIndexI32) {\r\n for (let i = 0; i + 1 < paramF64.length; i += 2)\r\n polyface.addParamUV(paramF64[i], paramF64[i + 1]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(paramIndexI32, numPerFace,\r\n (i: number) => { polyface.addParamIndex(i); });\r\n }\r\n if (intColorU32 && colorIndexI32) {\r\n for (const c of intColorU32)\r\n polyface.addColor(c);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(colorIndexI32, numPerFace,\r\n (i: number) => { polyface.addColorIndex(i); });\r\n }\r\n\r\n for (let i = 0; i + 2 < pointF64.length; i += 3)\r\n polyface.addPointXYZ(pointF64[i], pointF64[i + 1], pointF64[i + 2]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(pointIndexI32, numPerFace,\r\n (i: number, v?: boolean) => { polyface.addPointIndex(i, v); },\r\n () => { polyface.terminateFacet(false); });\r\n\r\n if (!polyface.validateAllIndices())\r\n return undefined;\r\n\r\n polyface.data.auxData = this.readPolyfaceAuxData(polyfaceHeader, polyfaceHeader.auxData());\r\n\r\n if (taggedNumericDataOffset) {\r\n const taggedNumericDataAccessor = nullToUndefined<BGFBAccessors.TaggedNumericData>(taggedNumericDataOffset);\r\n if (taggedNumericDataAccessor !== undefined) {\r\n const taggedNumericData = this.readTaggedNumericData(taggedNumericDataAccessor);\r\n if (taggedNumericData !== undefined)\r\n polyface.data.setTaggedNumericData(taggedNumericData);\r\n }\r\n }\r\n return polyface;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n public readCurveCollectionFromCurveVectorTable(cvTable: BGFBAccessors.CurveVector): CurveCollection {\r\n const numChildren = cvTable.curvesLength();\r\n const collectionType = cvTable.type();\r\n const collection = createTypedCurveCollection(collectionType);\r\n for (let i = 0; i < numChildren; i++) {\r\n const childOffset = cvTable.curves(i);\r\n if (childOffset !== null) {\r\n const child = this.readCurvePrimitiveFromVariant(childOffset);\r\n if (child)\r\n collection.tryAddChild(child);\r\n else {\r\n const childCollection = this.readCurveCollectionFromVariantGeometry(childOffset);\r\n if (childCollection)\r\n collection.tryAddChild(childCollection);\r\n }\r\n }\r\n }\r\n return collection;\r\n }\r\n /**\r\n * Extract a curve collection\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readCurveCollectionFromVariantGeometry(variant: BGFBAccessors.VariantGeometry): CurveCollection | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagCurveVector) {\r\n const cvTable = variant.geometry(new BGFBAccessors.CurveVector())!;\r\n return this.readCurveCollectionFromCurveVectorTable(cvTable);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract a curve collection\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readSolidPrimitiveFromVariant(variant: BGFBAccessors.VariantGeometry): SolidPrimitive | undefined {\r\n const geometryType = variant.geometryType();\r\n if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnBox) {\r\n const header = variant.geometry(new BGFBAccessors.DgnBox());\r\n const detail = header!.detail()!;\r\n return Box.createDgnBox(\r\n Point3d.create(detail.baseOriginX(), detail.baseOriginY(), detail.baseOriginZ()),\r\n Vector3d.create(detail.vectorXX(), detail.vectorXY(), detail.vectorXZ()),\r\n Vector3d.create(detail.vectorYX(), detail.vectorYY(), detail.vectorYZ()),\r\n Point3d.create(detail.topOriginX(), detail.topOriginY(), detail.topOriginZ()),\r\n detail.baseX(), detail.baseY(), detail.topX(), detail.topY(),\r\n detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnSphere) {\r\n const header = variant.geometry(new BGFBAccessors.DgnSphere());\r\n const detail = header!.detail()!;\r\n const lToWDetail = detail.localToWorld()!;\r\n const localToWorld = Transform.createRowValues(\r\n lToWDetail.axx(), lToWDetail.axy(), lToWDetail.axz(), lToWDetail.axw(),\r\n lToWDetail.ayx(), lToWDetail.ayy(), lToWDetail.ayz(), lToWDetail.ayw(),\r\n lToWDetail.azx(), lToWDetail.azy(), lToWDetail.azz(), lToWDetail.azw());\r\n return Sphere.createEllipsoid(localToWorld,\r\n AngleSweep.createStartSweepRadians(detail.startLatitudeRadians(), detail.latitudeSweepRadians()),\r\n detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnCone) {\r\n const header = variant.geometry(new BGFBAccessors.DgnCone());\r\n const detail = header!.detail()!;\r\n const centerA = Point3d.create(detail.centerAX(), detail.centerAY(), detail.centerAZ());\r\n const centerB = Point3d.create(detail.centerBX(), detail.centerBY(), detail.centerBZ());\r\n const vector0 = Vector3d.create(detail.vector0X(), detail.vector0Y(), detail.vector0Z());\r\n const vector90 = Vector3d.create(detail.vector90X(), detail.vector90Y(), detail.vector90Z());\r\n const radiusA = detail.radiusA();\r\n const radiusB = detail.radiusB();\r\n return Cone.createBaseAndTarget(centerA, centerB, vector0, vector90, radiusA, radiusB, detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe) {\r\n const header = variant.geometry(new BGFBAccessors.DgnTorusPipe())!;\r\n const detail = header.detail()!;\r\n const center = Point3d.create(detail.centerX(), detail.centerY(), detail.centerZ());\r\n const vectorX = Vector3d.create(detail.vectorXX(), detail.vectorXY(), detail.vectorXZ());\r\n const vectorY = Vector3d.create(detail.vectorYX(), detail.vectorYY(), detail.vectorYZ());\r\n const sweepRadians = detail.sweepRadians();\r\n const majorRadius = detail.majorRadius();\r\n const minorRadius = detail.minorRadius();\r\n return TorusPipe.createDgnTorusPipe(center, vectorX, vectorY, majorRadius, minorRadius, Angle.createRadians(sweepRadians), detail.capped());\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion) {\r\n const header = variant.geometry(new BGFBAccessors.DgnExtrusion())!;\r\n const dVector = new BGFBAccessors.DVector3d();\r\n header.extrusionVector(dVector);\r\n const extrusionVector = Vector3d.create(dVector.x(), dVector.y(), dVector.z());\r\n const baseCurve = header.baseCurve();\r\n if (baseCurve !== null) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(baseCurve);\r\n return LinearSweep.create(contour, extrusionVector, header.capped());\r\n }\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep) {\r\n const header = variant.geometry(new BGFBAccessors.DgnRotationalSweep())!;\r\n const dAxis = new BGFBAccessors.DRay3d();\r\n header.axis(dAxis);\r\n const axis = Ray3d.createXYZUVW(dAxis.x(), dAxis.y(), dAxis.z(), dAxis.ux(), dAxis.uy(), dAxis.uz());\r\n const sweepAngle = Angle.createRadians(header.sweepRadians());\r\n // const numVRules = header.numVRules();\r\n const baseCurve = header.baseCurve();\r\n if (baseCurve !== null) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(baseCurve);\r\n return RotationalSweep.create(contour, axis, sweepAngle, header.capped());\r\n }\r\n } if (geometryType === BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep) {\r\n const header = variant.geometry(new BGFBAccessors.DgnRuledSweep())!;\r\n const numCurves = header.curvesLength();\r\n const contours: CurveCollection[] = [];\r\n for (let i = 0; i < numCurves; i++) {\r\n const contourTable = header.curves(i);\r\n if (contourTable) {\r\n const contour = this.readCurveCollectionFromCurveVectorTable(contourTable);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n }\r\n if (contours.length > 0) {\r\n return RuledSweep.create(contours, header.capped());\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Extract any geometry type or array of geometry.\r\n * @param variant read position in the flat buffer.\r\n */\r\n public readGeometryQueryFromVariant(variant: BGFBAccessors.VariantGeometry): GeometryQuery | GeometryQuery[] | undefined {\r\n const rootType = variant.geometryType();\r\n switch (rootType) {\r\n case BGFBAccessors.VariantGeometryUnion.tagLineSegment:\r\n case BGFBAccessors.VariantGeometryUnion.tagLineString:\r\n case BGFBAccessors.VariantGeometryUnion.tagEllipticArc:\r\n case BGFBAccessors.VariantGeometryUnion.tagBsplineCurve:\r\n case BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral:\r\n case BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve:\r\n case BGFBAccessors.VariantGeometryUnion.tagAkimaCurve:\r\n {\r\n return this.readCurvePrimitiveFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagCurveVector:\r\n {\r\n return this.readCurveCollectionFromVariantGeometry(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagPolyface:\r\n {\r\n return this.readPolyfaceFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnBox:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnCone:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnSphere:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep:\r\n case BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep:\r\n {\r\n return this.readSolidPrimitiveFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagVectorOfVariantGeometry:\r\n {\r\n const geometry: GeometryQuery[] = [];\r\n const offsetToVectorOfVariantGeometry = variant.geometry(new BGFBAccessors.VectorOfVariantGeometry());\r\n for (let i = 0; i < offsetToVectorOfVariantGeometry!.membersLength(); i++) {\r\n const child = offsetToVectorOfVariantGeometry!.members(i);\r\n if (child !== null) {\r\n const childGeometry = this.readGeometryQueryFromVariant(child);\r\n if (childGeometry instanceof GeometryQuery) {\r\n geometry.push(childGeometry);\r\n } else if (Array.isArray(childGeometry)) {\r\n geometry.push(...childGeometry);\r\n }\r\n }\r\n }\r\n return geometry;\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagBsplineSurface: {\r\n return this.readBSplineSurfaceFromVariant(variant);\r\n }\r\n case BGFBAccessors.VariantGeometryUnion.tagPointString:\r\n {\r\n return this.readPointStringFromVariant(variant);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Deserialize bytes from a flatbuffer.\r\n * @param justTheBytes FlatBuffer bytes as created by BGFBWriter.createFlatBuffer (g);\r\n */\r\n public static bytesToGeometry(theBytes: Uint8Array, signature?: Uint8Array): GeometryQuery | GeometryQuery[] | undefined {\r\n const newByteBuffer = new flatbuffers.ByteBuffer(theBytes);\r\n if (signature) {\r\n if (theBytes.length < signature.length)\r\n return undefined;\r\n for (let i = 0; i < signature.length; i++)\r\n if (theBytes[i] !== signature[i])\r\n return undefined;\r\n newByteBuffer.setPosition(signature.length);\r\n }\r\n const root = BGFBAccessors.VariantGeometry.getRootAsVariantGeometry(newByteBuffer);\r\n const reader = new BGFBReader();\r\n return reader.readGeometryQueryFromVariant(root);\r\n }\r\n\r\n}\r\n/**\r\n * if data is \"null\" (the deprecated javascript idiom!) return undefined. Otherwise return the data as its own type.\r\n * @param data\r\n */\r\nfunction nullToUndefined<T>(data: any): T | undefined {\r\n if (data === null)\r\n return undefined;\r\n return data;\r\n}\r\n\r\nfunction createTypedCurveCollection(collectionType: number): CurveCollection {\r\n if (collectionType === 1) return new Path();\r\n if (collectionType === 2 || collectionType === 3) return new Loop();\r\n if (collectionType === 4) return new ParityRegion();\r\n if (collectionType === 5) return new UnionRegion();\r\n return new BagOfCurves();\r\n}\r\n/**\r\n * mappings between typescript spiral type strings and native integers.\r\n * @internal\r\n */\r\nexport class DgnSpiralTypeQueries {\r\n // remark: this is the full list based on native DSpiral2dBase.h.\r\n // This does not guarantee all types are supported.\r\n private static spiralTypeCodeMap = [\r\n [10, \"clothoid\"],\r\n [11, \"bloss\"],\r\n [12, \"biquadratic\"],\r\n [13, \"cosine\"],\r\n [14, \"sine\"],\r\n [15, \"Viennese\"],\r\n [16, \"weightedViennese\"],\r\n\r\n [50, \"WesternAustralian\"],\r\n [51, \"Czech\"],\r\n [52, \"AustralianRailCorp\"],\r\n [53, \"Italian\"],\r\n [54, \"PolishCubic\"],\r\n [55, \"Arema\"],\r\n [56, \"MXCubicAlongArc\"],\r\n [57, \"MXCubicAlongTangent\"],\r\n [58, \"ChineseCubic\"],\r\n [60, \"HalfCosine\"],\r\n [61, \"JapaneseCubic\"],\r\n ];\r\n /** Convert native integer type (e.g. from flatbuffer) to typescript string */\r\n public static typeCodeToString(typeCode: number): string | undefined {\r\n for (const entry of DgnSpiralTypeQueries.spiralTypeCodeMap) {\r\n if (entry[0] === typeCode)\r\n return entry[1] as string;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Convert typescript string to native integer type */\r\n public static stringToTypeCode(s: string, defaultToClothoid: boolean = true): number | undefined {\r\n for (const entry of DgnSpiralTypeQueries.spiralTypeCodeMap) {\r\n if (Geometry.equalStringNoCase(s, entry[1] as string))\r\n return entry[0] as number;\r\n }\r\n return defaultToClothoid ? 10 : undefined;\r\n }\r\n /** Ask if the indicated type code is a \"direct\" spiral */\r\n public static isDirectSpiralType(typeCode: number): boolean {\r\n return typeCode >= 50;\r\n }\r\n}\r\n"]}
|
|
@@ -145,7 +145,6 @@ export class BGFBWriter {
|
|
|
145
145
|
const props = curve.cloneProps();
|
|
146
146
|
const fitPointsOffset = this.writeDoubleArray(curve.copyFitPointsFloat64Array());
|
|
147
147
|
const knotOffset = props.knots ? this.writeDoubleArray(props.knots) : 0;
|
|
148
|
-
// REMARK: some native or flatbuffer quirk made startTangent a point and endTangent a vector.
|
|
149
148
|
BGFBAccessors.InterpolationCurve.startInterpolationCurve(this.builder);
|
|
150
149
|
BGFBAccessors.InterpolationCurve.addFitPoints(this.builder, fitPointsOffset);
|
|
151
150
|
if (props.order)
|
|
@@ -160,12 +159,13 @@ export class BGFBWriter {
|
|
|
160
159
|
BGFBAccessors.InterpolationCurve.addIsChordLenKnots(this.builder, props.isChordLenKnots);
|
|
161
160
|
if (props.isNaturalTangents)
|
|
162
161
|
BGFBAccessors.InterpolationCurve.addIsNaturalTangents(this.builder, props.isNaturalTangents);
|
|
162
|
+
// REMARK: some native or flatbuffer quirk made startTangent a point and endTangent a vector.
|
|
163
163
|
if (props.startTangent !== undefined) {
|
|
164
164
|
const startTangentOffset = BGFBAccessors.DPoint3d.createDPoint3d(this.builder, XYZ.x(props.startTangent), XYZ.y(props.startTangent), XYZ.z(props.startTangent));
|
|
165
165
|
BGFBAccessors.InterpolationCurve.addStartTangent(this.builder, startTangentOffset);
|
|
166
166
|
}
|
|
167
167
|
if (props.endTangent !== undefined) {
|
|
168
|
-
const endTangentOffset = BGFBAccessors.
|
|
168
|
+
const endTangentOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, XYZ.x(props.endTangent), XYZ.y(props.endTangent), XYZ.z(props.endTangent));
|
|
169
169
|
BGFBAccessors.InterpolationCurve.addEndTangent(this.builder, endTangentOffset);
|
|
170
170
|
}
|
|
171
171
|
if (knotOffset !== 0)
|