@itwin/core-geometry 4.9.0-dev.9 → 4.10.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.d.ts +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/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +141 -38
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +219 -31
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.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/CurveExtendMode.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/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.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/ParityRegion.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/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.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/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.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/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.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/GapSearchContext.js.map +1 -1
- 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/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +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/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.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/FrustumAnimation.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/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.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/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +5 -5
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +5 -5
- 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/PointStreaming.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/PolylineOps.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/Ray2d.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/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.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/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.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/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.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/PolyfaceData.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/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -2
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.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/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.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/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.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/HalfEdgePriorityQueue.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/MaskManager.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/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.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/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.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/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +141 -38
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +217 -30
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.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/CurveExtendMode.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/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.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/ParityRegion.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/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.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/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.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/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.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/GapSearchContext.js.map +1 -1
- 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/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +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/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.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/FrustumAnimation.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/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.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/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +5 -5
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +5 -5
- 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/PointStreaming.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/PolylineOps.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/Ray2d.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/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BandedSystem.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.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/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.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/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.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/PolyfaceData.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/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -2
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.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/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.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/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.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/HalfEdgePriorityQueue.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/MaskManager.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/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.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/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,mEAAgE;AAChE,qEAAkE;AAClE,mEAAwD;AACxD,mEAAkE;AAClE,6DAAyD;AACzD,+CAA8C;AAE9C,mEAAgE;AAChE,uCAA4C;AAE5C,2DAAwD;AAExD,2BAA2B;AAE3B;;;;;;;;;GASG;AACH,MAAa,YAAY;IAoDvB;;;;;;OAMG;IACH,YACE,cAAuB,KAAK,EAAE,aAAsB,KAAK,EAAE,aAAsB,KAAK,EAAE,WAAoB,KAAK;QAEjH,IAAI,CAAC,KAAK,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,iCAAe,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,2BAA2B;IACpB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM;YACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW;YAClB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,iBAAiB;YACxB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IACpD,aAAa,CAAC,KAAmB;QACtC,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,iCAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,yBAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,qCAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAClC,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;YAChD,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gDAAgD;IAChD,IAAW,cAAc;QACvB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,2BAA2B;IAC3B,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,mHAAmH;IACnH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IACD;;;;OAIG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,yFAAyF;IAClF,SAAS,CAAC,CAAS,EAAE,MAAiB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IACD,gFAAgF;IACzE,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,sFAAsF;IAC/E,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,4FAA4F;IAC5F,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,gGAAgG;IAChG,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,oCAAoC;IAC7B,oBAAoB,CAAC,IAAmC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,yGAAyG;IAClG,YAAY,CAAC,CAAS,EAAE,IAAc;QAC3C,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,wDAAwD;IACjD,yBAAyB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7D,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;mBACvE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;OASG;IACI,iBAAiB,CAAC,KAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,OAAe;QAC3F,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,OAAO,GAAG,OAAO;YACnB,OAAO,GAAG,OAAO,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/B,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxE,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpG,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC;gBAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;wBAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;wBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,6BAA6B;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,qDAAqD;IAC7C,MAAM,CAAC,SAAS,CAAC,IAAuB,EAAE,MAAc;QAC9D,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IACD;;;OAGG;IACI,kBAAkB,CAAC,MAAc;QACtC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI;oBAC7B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,eAAe,CAAC,MAAc;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAc;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,oEAAoE;IAC7D,KAAK,CAAC,MAAgB,EAAE,SAAqB;QAClD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YAC7C,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtF,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,YAAoB,mBAAQ,CAAC,mBAAmB;QAC9D,8DAA8D;QAC9D,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAqB,CAAC;QAChD,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,gFAAgF;QAChF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,oBAAqB,CAAC;YAClD,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAC/C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;YACxC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1D,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;gBACnE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,UAAU,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,0BAAW,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7G,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,2BAA2B,CAAC,eAAyB;QACjE,wFAAwF;QACxF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,OAAO,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,cAAc,CAAI,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QACzG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;wBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;yBAAM,CAAC,CAAC,cAAc;wBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACpB,MAAM,EAAE,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,yBAAyB,CACrC,UAAkB,EAAE,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QAE/F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM;mBAC7D,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBAChE,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;oBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,CAAC,CAAC,cAAc;oBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACpB,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;MAQE;IACK,cAAc,CAAC,eAA0B;QAC9C,IAAI,eAAe,IAAI,YAAY,CAAC,2BAA2B,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;gBACtC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACI,yBAAyB,CAAC,UAAkB,EAAE,eAAyB;QAC5E,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;YACtC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,mCAAmC;IAC5B,cAAc;QACnB,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;;AAlpBH,oCAmpBC;AAlpBC;;;EAGE;AACqB,iCAAoB,GAAG,OAAO,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\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\r\nimport { PolyfaceAuxData } from \"./AuxData\";\r\nimport { FacetFaceData } from \"./FacetFaceData\";\r\nimport { TaggedNumericData } from \"./TaggedNumericData\";\r\n\r\n// cspell:word internaldocs\r\n\r\n/**\r\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\r\n * * Normal, uv-parameter, and color data are optional.\r\n * * A given data array is defined if and only if its corresponding index array is defined.\r\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\r\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\r\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\r\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\r\n * @public\r\n */\r\nexport class PolyfaceData {\r\n /**\r\n * Relative tolerance used in tests for planar facets.\r\n * @internal\r\n */\r\n public static readonly planarityLocalRelTol = 1.0e-13;\r\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\r\n public point: GrowableXYZArray;\r\n /** Indices of points at facet vertices. */\r\n public pointIndex: number[];\r\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\r\n public normal?: GrowableXYZArray;\r\n /** Indices of normals at facet vertices. */\r\n public normalIndex?: number[];\r\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\r\n public param?: GrowableXYArray;\r\n /** Indices of params at facet vertices. */\r\n public paramIndex?: number[];\r\n /**\r\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\r\n * exactly to 32-bit integers.\r\n */\r\n public color?: number[];\r\n /** Indices of colors at facet vertices. */\r\n public colorIndex?: number[];\r\n /**\r\n * Map from facet index to face data.\r\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\r\n * a given face of a solid.\r\n * * Face data remains empty until a face is specified.\r\n */\r\n public face: FacetFaceData[];\r\n /** Auxiliary data. */\r\n public auxData?: PolyfaceAuxData;\r\n /** Tagged geometry data. */\r\n public taggedNumericData?: TaggedNumericData;\r\n /**\r\n * Booleans indicating visibility of corresponding edges.\r\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\r\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\r\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\r\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\r\n */\r\n public edgeVisible: boolean[];\r\n /** Boolean tag indicating if the facets are viewable from the back. */\r\n private _twoSided: boolean;\r\n /**\r\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\r\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\r\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\r\n */\r\n private _expectedClosure: number;\r\n /**\r\n * Constructor for facets.\r\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\r\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\r\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\r\n * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.\r\n */\r\n public constructor(\r\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = false,\r\n ) {\r\n this.point = new GrowableXYZArray();\r\n this.pointIndex = [];\r\n if (needNormals) {\r\n this.normal = new GrowableXYZArray();\r\n this.normalIndex = [];\r\n }\r\n if (needParams) {\r\n this.param = new GrowableXYArray();\r\n this.paramIndex = [];\r\n }\r\n if (needColors) {\r\n this.color = [];\r\n this.colorIndex = [];\r\n }\r\n this.face = [];\r\n this.edgeVisible = [];\r\n this._twoSided = twoSided;\r\n this._expectedClosure = 0;\r\n }\r\n /** Return a deep clone. */\r\n public clone(): PolyfaceData {\r\n const result = new PolyfaceData();\r\n result.point = this.point.clone();\r\n result.pointIndex = this.pointIndex.slice();\r\n if (this.normal)\r\n result.normal = this.normal.clone();\r\n if (this.normalIndex)\r\n result.normalIndex = this.normalIndex.slice();\r\n if (this.param)\r\n result.param = this.param.clone();\r\n if (this.paramIndex)\r\n result.paramIndex = this.paramIndex.slice();\r\n if (this.color)\r\n result.color = this.color.slice();\r\n if (this.colorIndex)\r\n result.colorIndex = this.colorIndex.slice();\r\n result.face = this.face.slice();\r\n if (this.auxData)\r\n result.auxData = this.auxData.clone();\r\n if (this.taggedNumericData)\r\n result.taggedNumericData = this.taggedNumericData.clone();\r\n result.edgeVisible = this.edgeVisible.slice();\r\n result.twoSided = this.twoSided;\r\n result.expectedClosure = this.expectedClosure;\r\n return result;\r\n }\r\n /** Test for equal indices and nearly equal coordinates. */\r\n public isAlmostEqual(other: PolyfaceData): boolean {\r\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\r\n return false;\r\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\r\n return false;\r\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.color, other.color))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\r\n return false;\r\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\r\n return false;\r\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\r\n return false;\r\n if (this.twoSided !== other.twoSided)\r\n return false;\r\n if (this.expectedClosure !== other.expectedClosure)\r\n return false;\r\n return true;\r\n }\r\n /** Ask if normals are required in this mesh. */\r\n public get requireNormals(): boolean {\r\n return undefined !== this.normal;\r\n }\r\n /** Ask if params are required in this mesh. */\r\n public get requireParams(): boolean {\r\n return undefined !== this.param;\r\n }\r\n /** Ask if colors are required in this mesh. */\r\n public get requireColors(): boolean {\r\n return undefined !== this.color;\r\n }\r\n /** Get the point count */\r\n public get pointCount() {\r\n return this.point.length;\r\n }\r\n /** Get the normal count */\r\n public get normalCount() {\r\n return this.normal ? this.normal.length : 0;\r\n }\r\n /** Get the param count */\r\n public get paramCount() {\r\n return this.param ? this.param.length : 0;\r\n }\r\n /** Get the color count */\r\n public get colorCount() {\r\n return this.color ? this.color.length : 0;\r\n }\r\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\r\n public get indexCount() {\r\n return this.pointIndex.length;\r\n }\r\n /**\r\n * Get the number of faces.\r\n * * Note that a \"face\" is not a facet.\r\n * * A face is a subset of the Polyface's facets grouped for application purposes.\r\n */\r\n public get faceCount() {\r\n return this.face.length;\r\n }\r\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\r\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\r\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\r\n }\r\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\r\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\r\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\r\n }\r\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\r\n public getParam(i: number, result?: Point2d): Point2d | undefined {\r\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\r\n }\r\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\r\n public getColor(i: number): number {\r\n return this.color ? this.color[i] : 0;\r\n }\r\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\r\n public getEdgeVisible(i: number): boolean {\r\n return this.edgeVisible[i];\r\n }\r\n /** Get boolean tag indicating if the facets are to be considered viewable from the back. */\r\n public get twoSided(): boolean {\r\n return this._twoSided;\r\n }\r\n public set twoSided(value: boolean) {\r\n this._twoSided = value;\r\n }\r\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\r\n public get expectedClosure(): number {\r\n return this._expectedClosure;\r\n }\r\n public set expectedClosure(value: number) {\r\n this._expectedClosure = value;\r\n }\r\n /** Set the tagged geometry data. */\r\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\r\n this.taggedNumericData = data;\r\n }\r\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyPointTo(i: number, dest: Point3d): void {\r\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\r\n }\r\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyNormalTo(i: number, dest: Vector3d): void {\r\n if (this.normal)\r\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\r\n }\r\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyParamTo(i: number, dest: Point2d): void {\r\n if (this.param)\r\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\r\n }\r\n /** Test if param at a index `i` matches the given uv */\r\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\r\n if (this.param !== undefined && i >= 0 && i < this.param.length)\r\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\r\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\r\n return false;\r\n }\r\n /**\r\n * Copy data from `other` to `this`.\r\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\r\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\r\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\r\n * @param other polyface data being mined.\r\n * @param index0 start index in other's index arrays.\r\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\r\n * @param numWrap number of points to replicate as wraparound.\r\n */\r\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\r\n const numEdge = index1 - index0;\r\n if (numWrap > numEdge)\r\n numWrap = numEdge;\r\n const numTotal = numEdge + numWrap;\r\n this.resizeAllArrays(numTotal);\r\n // copy wrapped points\r\n for (let i = 0; i < numEdge; i++)\r\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\r\n // copy wrapped pointIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.pointIndex[i] = other.pointIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.pointIndex[numEdge + i] = this.pointIndex[i];\r\n // copy wrapped normals\r\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\r\n // copy wrapped normalIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.normalIndex[i] = other.normalIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.normalIndex[numEdge + i] = this.normalIndex[i];\r\n }\r\n // copy wrapped params\r\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\r\n // copy wrapped paramIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.paramIndex[i] = other.paramIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.paramIndex[numEdge + i] = this.paramIndex[i];\r\n }\r\n // copy wrapped colors\r\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.color[i] = other.color[other.colorIndex[index0 + i]];\r\n for (let i = 0; i < numWrap; i++)\r\n this.color[numEdge + i] = this.color[i];\r\n // copy wrapped colorIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.colorIndex[i] = other.colorIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.colorIndex[numEdge + i] = this.colorIndex[i];\r\n }\r\n // copy wrapped edge visibility\r\n for (let i = 0; i < numEdge; i++)\r\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\r\n // copy wrapped auxData\r\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\r\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\r\n const thisChannel = this.auxData.channels[iChannel];\r\n const otherChannel = other.auxData.channels[iChannel];\r\n const blockSize = thisChannel.entriesPerValue;\r\n if (thisChannel.data.length === otherChannel.data.length) {\r\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\r\n const thisData = thisChannel.data[iData];\r\n const otherData = otherChannel.data[iData];\r\n for (let i = 0; i < numEdge; i++)\r\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\r\n for (let i = 0; i < numWrap; i++)\r\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\r\n }\r\n }\r\n }\r\n // copy wrapped auxData index\r\n for (let i = 0; i < numEdge; i++)\r\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\r\n }\r\n }\r\n /** Trim the `data` arrays to the stated `length`. */\r\n private static trimArray(data: any[] | undefined, length: number) {\r\n if (data && length < data.length)\r\n data.length = length;\r\n }\r\n /**\r\n * Trim all index arrays to the stated `length`.\r\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\r\n */\r\n public trimAllIndexArrays(length: number): void {\r\n PolyfaceData.trimArray(this.pointIndex, length);\r\n PolyfaceData.trimArray(this.paramIndex, length);\r\n PolyfaceData.trimArray(this.normalIndex, length);\r\n PolyfaceData.trimArray(this.colorIndex, length);\r\n PolyfaceData.trimArray(this.edgeVisible, length);\r\n if (this.auxData) {\r\n PolyfaceData.trimArray(this.auxData.indices, length);\r\n for (const channel of this.auxData.channels) {\r\n for (const data of channel.data)\r\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\r\n }\r\n }\r\n }\r\n /**\r\n * Resize all data and index arrays to the specified `length`.\r\n * * This is used by visitors, whose data and index arrays are all parallel.\r\n */\r\n public resizeAllArrays(length: number): void {\r\n if (length > this.point.length) {\r\n while (this.point.length < length)\r\n this.point.push(Point3d.create());\r\n while (this.pointIndex.length < length)\r\n this.pointIndex.push(-1);\r\n if (this.normal)\r\n while (this.normal.length < length)\r\n this.normal.push(Vector3d.create());\r\n if (this.normalIndex)\r\n while (this.normalIndex.length < length)\r\n this.normalIndex.push(-1);\r\n if (this.param)\r\n while (this.param.length < length)\r\n this.param.push(Point2d.create());\r\n if (this.paramIndex)\r\n while (this.paramIndex.length < length)\r\n this.paramIndex.push(-1);\r\n if (this.color)\r\n while (this.color.length < length)\r\n this.color.push(0);\r\n if (this.colorIndex)\r\n while (this.colorIndex.length < length)\r\n this.colorIndex.push(-1);\r\n while (this.edgeVisible.length < length)\r\n this.edgeVisible.push(false);\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\r\n }\r\n }\r\n if (this.auxData.indices)\r\n this.auxData.indices.push(-1);\r\n }\r\n } else if (length < this.point.length) {\r\n this.point.resize(length);\r\n this.pointIndex.length = length;\r\n if (this.normal)\r\n this.normal.resize(length);\r\n if (this.normalIndex)\r\n this.normalIndex.length = length;\r\n if (this.param)\r\n this.param.resize(length);\r\n if (this.paramIndex)\r\n this.paramIndex.length = length;\r\n if (this.color)\r\n this.color.length = length;\r\n if (this.colorIndex)\r\n this.colorIndex.length = length;\r\n this.edgeVisible.length = length;\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n channelData.values.length = length * channel.entriesPerValue;\r\n }\r\n }\r\n if (this.auxData.indices)\r\n this.auxData.indices.length = length;\r\n }\r\n }\r\n }\r\n /**\r\n * Resize all data arrays to the specified `length`.\r\n * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\r\n */\r\n public resizeAllDataArrays(length: number): void {\r\n if (length > this.point.length) {\r\n while (this.point.length < length) this.point.push(Point3d.create());\r\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\r\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\r\n if (this.normal)\r\n while (this.normal.length < length) this.normal.push(Vector3d.create());\r\n if (this.param)\r\n while (this.param.length < length) this.param.push(Point2d.create());\r\n if (this.color)\r\n while (this.color.length < length) this.color.push(0);\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\r\n }\r\n }\r\n }\r\n } else if (length < this.point.length) {\r\n this.point.resize(length);\r\n this.edgeVisible.length = length;\r\n this.pointIndex.length = length;\r\n if (this.normal) this.normal.resize(length);\r\n if (this.param) this.param.resize(length);\r\n if (this.color) this.color.length = length;\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n channelData.values.length = length * channel.entriesPerValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Return the range of the point array (optionally transformed). */\r\n public range(result?: Range3d, transform?: Transform): Range3d {\r\n result = result ? result : Range3d.createNull();\r\n result.extendArray(this.point, transform);\r\n return result;\r\n }\r\n /**\r\n * Apply `transform` to point and normal arrays and to auxData.\r\n * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions\r\n * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n this.point.multiplyTransformInPlace(transform);\r\n if (this.normal && !transform.matrix.isIdentity)\r\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\r\n return undefined === this.auxData || this.auxData.tryTransformInPlace(transform);\r\n }\r\n /**\r\n * Compress the instance by equating duplicate data.\r\n * * Search for duplicates within vertices, normals, params, and colors.\r\n * * Compress each data array.\r\n * * Revise all indexing for the relocated data.\r\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\r\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\r\n */\r\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\r\n // more info can be found at geometry/internaldocs/Polyface.md\r\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\r\n this.point = packedPoints.growablePackedPoints!;\r\n packedPoints.updateIndices(this.pointIndex);\r\n // for now, normals, params, and colors use the default tolerance for clustering\r\n if (this.normalIndex && this.normal) {\r\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\r\n this.normal = packedNormals.growablePackedPoints!;\r\n packedNormals.updateIndices(this.normalIndex);\r\n }\r\n if (this.paramIndex && this.param) {\r\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\r\n this.param = packedParams.growablePackedPoints;\r\n packedParams.updateIndices(this.paramIndex);\r\n }\r\n if (this.colorIndex && this.color) {\r\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\r\n this.color = packedColors.packedNumbers;\r\n packedColors.updateIndices(this.colorIndex);\r\n }\r\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\r\n const dataSize = this.auxData.channels[0].entriesPerValue;\r\n if (1 === dataSize) {\r\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\r\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\r\n packedData.updateIndices(this.auxData.indices);\r\n } else if (3 === dataSize) {\r\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\r\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\r\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\r\n packedData.updateIndices(this.auxData.indices);\r\n }\r\n }\r\n }\r\n /**\r\n * Test if `facetStartIndex` is (minimally) valid.\r\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\r\n * * Each entry must be strictly smaller than the one that follows.\r\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\r\n * `facetStartIndex[k + 1]`\r\n */\r\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\r\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\r\n if (facetStartIndex.length === 0)\r\n return false;\r\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\r\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Reverse the indices for the specified facets in the given index array.\r\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\r\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\r\n * array. See the non-static [[reverseIndices]].\r\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\r\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\r\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\r\n */\r\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\r\n if (!indices || indices.length === 0)\r\n return true; // empty case\r\n if (indices.length > 0) {\r\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\r\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\r\n let index0 = facetStartIndex[i];\r\n let index1 = facetStartIndex[i + 1];\r\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\r\n while (index1 > index0 + 2) {\r\n index1--;\r\n index0++;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n }\r\n } else { // reverse all\r\n while (index1 > index0 + 1) {\r\n index1--;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n index0++;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Reverse the indices for the specified facet in the specified index array.\r\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\r\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\r\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\r\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\r\n * See [[reverseIndices]].\r\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\r\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\r\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\r\n */\r\n public static reverseIndicesSingleFacet<T>(\r\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\r\n ): boolean {\r\n if (!indices || indices.length === 0)\r\n return true; // empty case\r\n if (indices.length > 0) {\r\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\r\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\r\n let index0 = facetStartIndex[facetIndex];\r\n let index1 = facetStartIndex[facetIndex + 1];\r\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\r\n while (index1 > index0 + 2) {\r\n index1--;\r\n index0++;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n }\r\n } else { // reverse all\r\n while (index1 > index0 + 1) {\r\n index1--;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n index0++;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\r\n * and edgeVisible).\r\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\r\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\r\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\r\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\r\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\r\n */\r\n public reverseIndices(facetStartIndex?: number[]): void {\r\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\r\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\r\n if (this.normalIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\r\n if (this.paramIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\r\n if (this.colorIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\r\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\r\n }\r\n }\r\n /**\r\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\r\n * and edgeVisible).\r\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\r\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\r\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\r\n * See [[reverseIndices]].\r\n */\r\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\r\n if (this.normalIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\r\n if (this.paramIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\r\n if (this.colorIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\r\n }\r\n /** Scale all the normals by -1. */\r\n public reverseNormals() {\r\n if (this.normal)\r\n this.normal.scaleInPlace(-1.0);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,mEAAgE;AAChE,qEAAkE;AAClE,mEAAwD;AACxD,mEAAkE;AAClE,6DAAyD;AACzD,+CAA8C;AAE9C,mEAAgE;AAChE,uCAA4C;AAE5C,2DAAwD;AAExD,2BAA2B;AAE3B;;;;;;;;;GASG;AACH,MAAa,YAAY;IAoDvB;;;;;;OAMG;IACH,YACE,cAAuB,KAAK,EAAE,aAAsB,KAAK,EAAE,aAAsB,KAAK,EAAE,WAAoB,KAAK;QAEjH,IAAI,CAAC,KAAK,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,iCAAe,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,2BAA2B;IACpB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM;YACb,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW;YAClB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YACZ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,iBAAiB;YACxB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IACpD,aAAa,CAAC,KAAmB;QACtC,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,mCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,iCAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,yBAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,qCAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,0BAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAClC,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;YAChD,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gDAAgD;IAChD,IAAW,cAAc;QACvB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,2BAA2B;IAC3B,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,0BAA0B;IAC1B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,mHAAmH;IACnH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IACD;;;;OAIG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,yFAAyF;IAClF,SAAS,CAAC,CAAS,EAAE,MAAiB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IACD,6FAA6F;IACtF,QAAQ,CAAC,CAAS,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IACD,gFAAgF;IACzE,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,sFAAsF;IAC/E,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,4FAA4F;IAC5F,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,gGAAgG;IAChG,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,oCAAoC;IAC7B,oBAAoB,CAAC,IAAmC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,yGAAyG;IAClG,YAAY,CAAC,CAAS,EAAE,IAAc;QAC3C,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,wGAAwG;IACjG,WAAW,CAAC,CAAS,EAAE,IAAa;QACzC,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,wDAAwD;IACjD,yBAAyB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7D,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;mBACvE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;OASG;IACI,iBAAiB,CAAC,KAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,OAAe;QAC3F,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,OAAO,GAAG,OAAO;YACnB,OAAO,GAAG,OAAO,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/B,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxE,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpG,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC;gBAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;wBAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;wBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;4BAC9B,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,6BAA6B;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,qDAAqD;IAC7C,MAAM,CAAC,SAAS,CAAC,IAAuB,EAAE,MAAc;QAC9D,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IACD;;;OAGG;IACI,kBAAkB,CAAC,MAAc;QACtC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI;oBAC7B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,eAAe,CAAC,MAAc;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU;gBACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;oBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAc;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,MAAM;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,KAAK;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe;4BAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,oEAAoE;IAC7D,KAAK,CAAC,MAAgB,EAAE,SAAqB;QAClD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YAC7C,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtF,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,YAAoB,mBAAQ,CAAC,mBAAmB;QAC9D,8DAA8D;QAC9D,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAqB,CAAC;QAChD,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,gFAAgF;QAChF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,oBAAqB,CAAC;YAClD,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAC/C,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;YACxC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1D,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,mCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;gBACnE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,UAAU,GAAG,mCAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,0BAAW,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7G,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,2BAA2B,CAAC,eAAyB;QACjE,wFAAwF;QACxF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,OAAO,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,cAAc,CAAI,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QACzG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,MAAM,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;wBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;yBAAM,CAAC,CAAC,cAAc;wBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACpB,MAAM,EAAE,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,yBAAyB,CACrC,UAAkB,EAAE,eAAyB,EAAE,OAAwB,EAAE,aAAsB;QAE/F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM;mBAC7D,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBAChE,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,aAAa,EAAE,CAAC,CAAC,+DAA+D;oBAClF,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,CAAC,CAAC,cAAc;oBACrB,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACpB,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;MAQE;IACK,cAAc,CAAC,eAA0B;QAC9C,IAAI,eAAe,IAAI,YAAY,CAAC,2BAA2B,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;gBACtC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;gBACrC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtE,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACI,yBAAyB,CAAC,UAAkB,EAAE,eAAyB;QAC5E,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;YACtC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACrC,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7F,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,mCAAmC;IAC5B,cAAc;QACnB,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;;AAlpBH,oCAmpBC;AAlpBC;;;EAGE;AACqB,iCAAoB,GAAG,OAAO,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\nimport { PolyfaceAuxData } from \"./AuxData\";\nimport { FacetFaceData } from \"./FacetFaceData\";\nimport { TaggedNumericData } from \"./TaggedNumericData\";\n\n// cspell:word internaldocs\n\n/**\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\n * * Normal, uv-parameter, and color data are optional.\n * * A given data array is defined if and only if its corresponding index array is defined.\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\n * @public\n */\nexport class PolyfaceData {\n /**\n * Relative tolerance used in tests for planar facets.\n * @internal\n */\n public static readonly planarityLocalRelTol = 1.0e-13;\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\n public point: GrowableXYZArray;\n /** Indices of points at facet vertices. */\n public pointIndex: number[];\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\n public normal?: GrowableXYZArray;\n /** Indices of normals at facet vertices. */\n public normalIndex?: number[];\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\n public param?: GrowableXYArray;\n /** Indices of params at facet vertices. */\n public paramIndex?: number[];\n /**\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\n * exactly to 32-bit integers.\n */\n public color?: number[];\n /** Indices of colors at facet vertices. */\n public colorIndex?: number[];\n /**\n * Map from facet index to face data.\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\n * a given face of a solid.\n * * Face data remains empty until a face is specified.\n */\n public face: FacetFaceData[];\n /** Auxiliary data. */\n public auxData?: PolyfaceAuxData;\n /** Tagged geometry data. */\n public taggedNumericData?: TaggedNumericData;\n /**\n * Booleans indicating visibility of corresponding edges.\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\n */\n public edgeVisible: boolean[];\n /** Boolean tag indicating if the facets are viewable from the back. */\n private _twoSided: boolean;\n /**\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\n */\n private _expectedClosure: number;\n /**\n * Constructor for facets.\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\n * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.\n */\n public constructor(\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = false,\n ) {\n this.point = new GrowableXYZArray();\n this.pointIndex = [];\n if (needNormals) {\n this.normal = new GrowableXYZArray();\n this.normalIndex = [];\n }\n if (needParams) {\n this.param = new GrowableXYArray();\n this.paramIndex = [];\n }\n if (needColors) {\n this.color = [];\n this.colorIndex = [];\n }\n this.face = [];\n this.edgeVisible = [];\n this._twoSided = twoSided;\n this._expectedClosure = 0;\n }\n /** Return a deep clone. */\n public clone(): PolyfaceData {\n const result = new PolyfaceData();\n result.point = this.point.clone();\n result.pointIndex = this.pointIndex.slice();\n if (this.normal)\n result.normal = this.normal.clone();\n if (this.normalIndex)\n result.normalIndex = this.normalIndex.slice();\n if (this.param)\n result.param = this.param.clone();\n if (this.paramIndex)\n result.paramIndex = this.paramIndex.slice();\n if (this.color)\n result.color = this.color.slice();\n if (this.colorIndex)\n result.colorIndex = this.colorIndex.slice();\n result.face = this.face.slice();\n if (this.auxData)\n result.auxData = this.auxData.clone();\n if (this.taggedNumericData)\n result.taggedNumericData = this.taggedNumericData.clone();\n result.edgeVisible = this.edgeVisible.slice();\n result.twoSided = this.twoSided;\n result.expectedClosure = this.expectedClosure;\n return result;\n }\n /** Test for equal indices and nearly equal coordinates. */\n public isAlmostEqual(other: PolyfaceData): boolean {\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\n return false;\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\n return false;\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\n return false;\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\n return false;\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\n return false;\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\n return false;\n if (!NumberArray.isExactEqual(this.color, other.color))\n return false;\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\n return false;\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\n return false;\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\n return false;\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\n return false;\n if (this.twoSided !== other.twoSided)\n return false;\n if (this.expectedClosure !== other.expectedClosure)\n return false;\n return true;\n }\n /** Ask if normals are required in this mesh. */\n public get requireNormals(): boolean {\n return undefined !== this.normal;\n }\n /** Ask if params are required in this mesh. */\n public get requireParams(): boolean {\n return undefined !== this.param;\n }\n /** Ask if colors are required in this mesh. */\n public get requireColors(): boolean {\n return undefined !== this.color;\n }\n /** Get the point count */\n public get pointCount() {\n return this.point.length;\n }\n /** Get the normal count */\n public get normalCount() {\n return this.normal ? this.normal.length : 0;\n }\n /** Get the param count */\n public get paramCount() {\n return this.param ? this.param.length : 0;\n }\n /** Get the color count */\n public get colorCount() {\n return this.color ? this.color.length : 0;\n }\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\n public get indexCount() {\n return this.pointIndex.length;\n }\n /**\n * Get the number of faces.\n * * Note that a \"face\" is not a facet.\n * * A face is a subset of the Polyface's facets grouped for application purposes.\n */\n public get faceCount() {\n return this.face.length;\n }\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\n }\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\n }\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\n public getParam(i: number, result?: Point2d): Point2d | undefined {\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\n }\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\n public getColor(i: number): number {\n return this.color ? this.color[i] : 0;\n }\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\n public getEdgeVisible(i: number): boolean {\n return this.edgeVisible[i];\n }\n /** Get boolean tag indicating if the facets are to be considered viewable from the back. */\n public get twoSided(): boolean {\n return this._twoSided;\n }\n public set twoSided(value: boolean) {\n this._twoSided = value;\n }\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\n public get expectedClosure(): number {\n return this._expectedClosure;\n }\n public set expectedClosure(value: number) {\n this._expectedClosure = value;\n }\n /** Set the tagged geometry data. */\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\n this.taggedNumericData = data;\n }\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\n public copyPointTo(i: number, dest: Point3d): void {\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\n public copyNormalTo(i: number, dest: Vector3d): void {\n if (this.normal)\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\n public copyParamTo(i: number, dest: Point2d): void {\n if (this.param)\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\n }\n /** Test if param at a index `i` matches the given uv */\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\n if (this.param !== undefined && i >= 0 && i < this.param.length)\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\n return false;\n }\n /**\n * Copy data from `other` to `this`.\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\n * @param other polyface data being mined.\n * @param index0 start index in other's index arrays.\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\n * @param numWrap number of points to replicate as wraparound.\n */\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\n const numEdge = index1 - index0;\n if (numWrap > numEdge)\n numWrap = numEdge;\n const numTotal = numEdge + numWrap;\n this.resizeAllArrays(numTotal);\n // copy wrapped points\n for (let i = 0; i < numEdge; i++)\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\n // copy wrapped pointIndex\n for (let i = 0; i < numEdge; i++)\n this.pointIndex[i] = other.pointIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.pointIndex[numEdge + i] = this.pointIndex[i];\n // copy wrapped normals\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\n for (let i = 0; i < numEdge; i++)\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\n // copy wrapped normalIndex\n for (let i = 0; i < numEdge; i++)\n this.normalIndex[i] = other.normalIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.normalIndex[numEdge + i] = this.normalIndex[i];\n }\n // copy wrapped params\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\n for (let i = 0; i < numEdge; i++)\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\n // copy wrapped paramIndex\n for (let i = 0; i < numEdge; i++)\n this.paramIndex[i] = other.paramIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.paramIndex[numEdge + i] = this.paramIndex[i];\n }\n // copy wrapped colors\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\n for (let i = 0; i < numEdge; i++)\n this.color[i] = other.color[other.colorIndex[index0 + i]];\n for (let i = 0; i < numWrap; i++)\n this.color[numEdge + i] = this.color[i];\n // copy wrapped colorIndex\n for (let i = 0; i < numEdge; i++)\n this.colorIndex[i] = other.colorIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.colorIndex[numEdge + i] = this.colorIndex[i];\n }\n // copy wrapped edge visibility\n for (let i = 0; i < numEdge; i++)\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\n // copy wrapped auxData\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\n const thisChannel = this.auxData.channels[iChannel];\n const otherChannel = other.auxData.channels[iChannel];\n const blockSize = thisChannel.entriesPerValue;\n if (thisChannel.data.length === otherChannel.data.length) {\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\n const thisData = thisChannel.data[iData];\n const otherData = otherChannel.data[iData];\n for (let i = 0; i < numEdge; i++)\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\n for (let i = 0; i < numWrap; i++)\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\n }\n }\n }\n // copy wrapped auxData index\n for (let i = 0; i < numEdge; i++)\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\n }\n }\n /** Trim the `data` arrays to the stated `length`. */\n private static trimArray(data: any[] | undefined, length: number) {\n if (data && length < data.length)\n data.length = length;\n }\n /**\n * Trim all index arrays to the stated `length`.\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\n */\n public trimAllIndexArrays(length: number): void {\n PolyfaceData.trimArray(this.pointIndex, length);\n PolyfaceData.trimArray(this.paramIndex, length);\n PolyfaceData.trimArray(this.normalIndex, length);\n PolyfaceData.trimArray(this.colorIndex, length);\n PolyfaceData.trimArray(this.edgeVisible, length);\n if (this.auxData) {\n PolyfaceData.trimArray(this.auxData.indices, length);\n for (const channel of this.auxData.channels) {\n for (const data of channel.data)\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\n }\n }\n }\n /**\n * Resize all data and index arrays to the specified `length`.\n * * This is used by visitors, whose data and index arrays are all parallel.\n */\n public resizeAllArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length)\n this.point.push(Point3d.create());\n while (this.pointIndex.length < length)\n this.pointIndex.push(-1);\n if (this.normal)\n while (this.normal.length < length)\n this.normal.push(Vector3d.create());\n if (this.normalIndex)\n while (this.normalIndex.length < length)\n this.normalIndex.push(-1);\n if (this.param)\n while (this.param.length < length)\n this.param.push(Point2d.create());\n if (this.paramIndex)\n while (this.paramIndex.length < length)\n this.paramIndex.push(-1);\n if (this.color)\n while (this.color.length < length)\n this.color.push(0);\n if (this.colorIndex)\n while (this.colorIndex.length < length)\n this.colorIndex.push(-1);\n while (this.edgeVisible.length < length)\n this.edgeVisible.push(false);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.push(-1);\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.pointIndex.length = length;\n if (this.normal)\n this.normal.resize(length);\n if (this.normalIndex)\n this.normalIndex.length = length;\n if (this.param)\n this.param.resize(length);\n if (this.paramIndex)\n this.paramIndex.length = length;\n if (this.color)\n this.color.length = length;\n if (this.colorIndex)\n this.colorIndex.length = length;\n this.edgeVisible.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.length = length;\n }\n }\n }\n /**\n * Resize all data arrays to the specified `length`.\n * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\n */\n public resizeAllDataArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length) this.point.push(Point3d.create());\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\n if (this.normal)\n while (this.normal.length < length) this.normal.push(Vector3d.create());\n if (this.param)\n while (this.param.length < length) this.param.push(Point2d.create());\n if (this.color)\n while (this.color.length < length) this.color.push(0);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.edgeVisible.length = length;\n this.pointIndex.length = length;\n if (this.normal) this.normal.resize(length);\n if (this.param) this.param.resize(length);\n if (this.color) this.color.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n }\n }\n }\n /** Return the range of the point array (optionally transformed). */\n public range(result?: Range3d, transform?: Transform): Range3d {\n result = result ? result : Range3d.createNull();\n result.extendArray(this.point, transform);\n return result;\n }\n /**\n * Apply `transform` to point and normal arrays and to auxData.\n * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions\n * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n this.point.multiplyTransformInPlace(transform);\n if (this.normal && !transform.matrix.isIdentity)\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\n return undefined === this.auxData || this.auxData.tryTransformInPlace(transform);\n }\n /**\n * Compress the instance by equating duplicate data.\n * * Search for duplicates within vertices, normals, params, and colors.\n * * Compress each data array.\n * * Revise all indexing for the relocated data.\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\n */\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\n // more info can be found at geometry/internaldocs/Polyface.md\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\n this.point = packedPoints.growablePackedPoints!;\n packedPoints.updateIndices(this.pointIndex);\n // for now, normals, params, and colors use the default tolerance for clustering\n if (this.normalIndex && this.normal) {\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\n this.normal = packedNormals.growablePackedPoints!;\n packedNormals.updateIndices(this.normalIndex);\n }\n if (this.paramIndex && this.param) {\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\n this.param = packedParams.growablePackedPoints;\n packedParams.updateIndices(this.paramIndex);\n }\n if (this.colorIndex && this.color) {\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\n this.color = packedColors.packedNumbers;\n packedColors.updateIndices(this.colorIndex);\n }\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\n const dataSize = this.auxData.channels[0].entriesPerValue;\n if (1 === dataSize) {\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\n packedData.updateIndices(this.auxData.indices);\n } else if (3 === dataSize) {\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\n packedData.updateIndices(this.auxData.indices);\n }\n }\n }\n /**\n * Test if `facetStartIndex` is (minimally) valid.\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\n * * Each entry must be strictly smaller than the one that follows.\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\n * `facetStartIndex[k + 1]`\n */\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\n if (facetStartIndex.length === 0)\n return false;\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\n return false;\n return true;\n }\n /**\n * Reverse the indices for the specified facets in the given index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\n * array. See the non-static [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\n let index0 = facetStartIndex[i];\n let index1 = facetStartIndex[i + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Reverse the indices for the specified facet in the specified index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndicesSingleFacet<T>(\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\n ): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\n let index0 = facetStartIndex[facetIndex];\n let index1 = facetStartIndex[facetIndex + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\n */\n public reverseIndices(facetStartIndex?: number[]): void {\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\n }\n }\n /**\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n */\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\n }\n /** Scale all the normals by -1. */\n public reverseNormals() {\n if (this.normal)\n this.normal.scaleInPlace(-1.0);\n }\n}\n"]}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module Polyface
|
|
3
|
-
*/
|
|
4
1
|
import { BagOfCurves, CurveCollection } from "../curve/CurveCollection";
|
|
5
2
|
import { LinearCurvePrimitive } from "../curve/CurvePrimitive";
|
|
6
3
|
import { AnyChain } from "../curve/CurveTypes";
|
|
@@ -267,9 +264,9 @@ export declare class PolyfaceQuery {
|
|
|
267
264
|
static isConvexByDihedralAngleCount(source: Polyface, ignoreBoundaries?: boolean): boolean;
|
|
268
265
|
/**
|
|
269
266
|
* Test edges pairing in `source` mesh.
|
|
270
|
-
* * For `allowSimpleBoundaries === false
|
|
271
|
-
* * For `allowSimpleBoundaries === true`
|
|
272
|
-
* still properly matched internally.
|
|
267
|
+
* * For `allowSimpleBoundaries === false`, a return value of `true` means this is a closed 2-manifold surface.
|
|
268
|
+
* * For `allowSimpleBoundaries === true`, a return value of `true` means this is a 2-manifold surface which may have
|
|
269
|
+
* a boundary, but is still properly matched internally.
|
|
273
270
|
* * Any edge with 3 or more adjacent facets triggers `false` return.
|
|
274
271
|
* * Any edge with 2 adjacent facets in the same direction triggers a `false` return.
|
|
275
272
|
*/
|
|
@@ -300,7 +297,7 @@ export declare class PolyfaceQuery {
|
|
|
300
297
|
* Collect boundary edges.
|
|
301
298
|
* * Return the edges as the simplest collection of chains of line segments.
|
|
302
299
|
* @param source polyface or visitor.
|
|
303
|
-
* @param includeTypical true to
|
|
300
|
+
* @param includeTypical true to include typical boundary edges with a single adjacent facet.
|
|
304
301
|
* @param includeMismatch true to include edges with more than 2 adjacent facets.
|
|
305
302
|
* @param includeNull true to include edges with identical start and end vertex indices.
|
|
306
303
|
*/
|
|
@@ -390,19 +387,19 @@ export declare class PolyfaceQuery {
|
|
|
390
387
|
static boundaryOfVisibleSubset(polyface: IndexedPolyface, visibilitySelect: 0 | 1 | 2, vectorToEye: Vector3d, sideAngleTolerance?: Angle): CurveCollection | undefined;
|
|
391
388
|
/**
|
|
392
389
|
* Search for edges with only 1 adjacent facet.
|
|
393
|
-
* *
|
|
394
|
-
* * Emit the
|
|
390
|
+
* * Accumulate them into chains.
|
|
391
|
+
* * Emit the chains to the `announceChain` callback.
|
|
395
392
|
*/
|
|
396
|
-
static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor,
|
|
393
|
+
static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor, announceChain: (points: LineString3d) => void): void;
|
|
397
394
|
/**
|
|
398
395
|
* Return a mesh with
|
|
399
|
-
* * clusters of adjacent, coplanar facets merged into larger facets.
|
|
400
|
-
* * other facets
|
|
396
|
+
* * clusters of adjacent, coplanar facets merged into larger (possibly non-convex) facets.
|
|
397
|
+
* * other facets are unchanged.
|
|
401
398
|
* @param mesh existing mesh or visitor.
|
|
402
399
|
* @param maxSmoothEdgeAngle maximum dihedral angle across an edge between facets deemed coplanar. If undefined,
|
|
403
400
|
* uses `Geometry.smallAngleRadians`.
|
|
404
401
|
*/
|
|
405
|
-
static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface
|
|
402
|
+
static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface;
|
|
406
403
|
/**
|
|
407
404
|
* Return a mesh with "some" holes filled in with new facets.
|
|
408
405
|
* * Candidate chains are computed by [[announceBoundaryChainsAsLineString3d]].
|
|
@@ -420,7 +417,7 @@ export declare class PolyfaceQuery {
|
|
|
420
417
|
*/
|
|
421
418
|
static fillSimpleHoles(mesh: Polyface | PolyfaceVisitor, options: HoleFillOptions, unfilledChains?: LineString3d[]): IndexedPolyface | undefined;
|
|
422
419
|
/** Clone the facets in each partition to a separate polyface. */
|
|
423
|
-
static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]):
|
|
420
|
+
static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): IndexedPolyface[];
|
|
424
421
|
/** Clone facets that pass a filter function. */
|
|
425
422
|
static cloneFiltered(source: Polyface | PolyfaceVisitor, filter: (visitor: PolyfaceVisitor) => boolean): IndexedPolyface;
|
|
426
423
|
/** Clone the facets with in-facet dangling edges removed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ exports.PolyfaceQuery = exports.DuplicateFacetClusterSelector = exports.OffsetMe
|
|
|
10
10
|
*/
|
|
11
11
|
/* eslint-disable @typescript-eslint/naming-convention, no-empty */
|
|
12
12
|
// cspell:word internaldocs
|
|
13
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
13
14
|
const CurveCollection_1 = require("../curve/CurveCollection");
|
|
14
15
|
const CurveOps_1 = require("../curve/CurveOps");
|
|
15
16
|
const MultiChainCollector_1 = require("../curve/internalContexts/MultiChainCollector");
|
|
@@ -20,12 +21,13 @@ const StrokeOptions_1 = require("../curve/StrokeOptions");
|
|
|
20
21
|
const Geometry_1 = require("../Geometry");
|
|
21
22
|
const Angle_1 = require("../geometry3d/Angle");
|
|
22
23
|
const BarycentricTriangle_1 = require("../geometry3d/BarycentricTriangle");
|
|
23
|
-
const FrameBuilder_1 = require("../geometry3d/FrameBuilder");
|
|
24
24
|
const Point3dArrayCarrier_1 = require("../geometry3d/Point3dArrayCarrier");
|
|
25
25
|
const Point3dVector3d_1 = require("../geometry3d/Point3dVector3d");
|
|
26
26
|
const PointHelpers_1 = require("../geometry3d/PointHelpers");
|
|
27
27
|
const PolygonOps_1 = require("../geometry3d/PolygonOps");
|
|
28
28
|
const Range_1 = require("../geometry3d/Range");
|
|
29
|
+
const Ray3d_1 = require("../geometry3d/Ray3d");
|
|
30
|
+
const Transform_1 = require("../geometry3d/Transform");
|
|
29
31
|
const Matrix4d_1 = require("../geometry4d/Matrix4d");
|
|
30
32
|
const MomentData_1 = require("../geometry4d/MomentData");
|
|
31
33
|
const UnionFind_1 = require("../numerics/UnionFind");
|
|
@@ -445,9 +447,9 @@ class PolyfaceQuery {
|
|
|
445
447
|
}
|
|
446
448
|
/**
|
|
447
449
|
* Test edges pairing in `source` mesh.
|
|
448
|
-
* * For `allowSimpleBoundaries === false
|
|
449
|
-
* * For `allowSimpleBoundaries === true`
|
|
450
|
-
* still properly matched internally.
|
|
450
|
+
* * For `allowSimpleBoundaries === false`, a return value of `true` means this is a closed 2-manifold surface.
|
|
451
|
+
* * For `allowSimpleBoundaries === true`, a return value of `true` means this is a 2-manifold surface which may have
|
|
452
|
+
* a boundary, but is still properly matched internally.
|
|
451
453
|
* * Any edge with 3 or more adjacent facets triggers `false` return.
|
|
452
454
|
* * Any edge with 2 adjacent facets in the same direction triggers a `false` return.
|
|
453
455
|
*/
|
|
@@ -480,8 +482,8 @@ class PolyfaceQuery {
|
|
|
480
482
|
* @param includeNull true to announce edges with identical start and end vertex indices.
|
|
481
483
|
*/
|
|
482
484
|
static announceBoundaryEdges(source, announceEdge, includeTypical = true, includeMismatch = true, includeNull = true) {
|
|
483
|
-
if (source === undefined)
|
|
484
|
-
return
|
|
485
|
+
if (source === undefined || (!includeTypical && !includeMismatch && !includeNull))
|
|
486
|
+
return;
|
|
485
487
|
const edges = new IndexedEdgeMatcher_1.IndexedEdgeMatcher();
|
|
486
488
|
const visitor = source instanceof Polyface_1.Polyface ? source.createVisitor(1) : source;
|
|
487
489
|
visitor.setNumWrap(1);
|
|
@@ -493,29 +495,18 @@ class PolyfaceQuery {
|
|
|
493
495
|
}
|
|
494
496
|
}
|
|
495
497
|
const boundaryEdges = [];
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
const badList = [];
|
|
500
|
-
if (includeTypical && boundaryEdges.length > 0)
|
|
501
|
-
badList.push(boundaryEdges);
|
|
502
|
-
if (includeNull && nullEdges.length > 0)
|
|
503
|
-
badList.push(nullEdges);
|
|
504
|
-
if (includeMismatch && allOtherEdges.length > 0)
|
|
505
|
-
badList.push(allOtherEdges);
|
|
506
|
-
if (badList.length === 0)
|
|
507
|
-
return undefined;
|
|
498
|
+
edges.sortAndCollectClusters(undefined, includeTypical ? boundaryEdges : undefined, includeNull ? boundaryEdges : undefined, includeMismatch ? boundaryEdges : undefined);
|
|
499
|
+
if (boundaryEdges.length === 0)
|
|
500
|
+
return;
|
|
508
501
|
const sourcePolyface = visitor.clientPolyface();
|
|
509
502
|
const pointA = Point3dVector3d_1.Point3d.create();
|
|
510
503
|
const pointB = Point3dVector3d_1.Point3d.create();
|
|
511
|
-
for (const
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
announceEdge(pointA, pointB, indexA, indexB, e1.facetIndex);
|
|
518
|
-
}
|
|
504
|
+
for (const e of boundaryEdges) {
|
|
505
|
+
const e1 = e instanceof IndexedEdgeMatcher_1.SortableEdge ? e : e[0];
|
|
506
|
+
const indexA = e1.vertexIndexA;
|
|
507
|
+
const indexB = e1.vertexIndexB;
|
|
508
|
+
if (sourcePolyface.data.getPoint(indexA, pointA) && sourcePolyface.data.getPoint(indexB, pointB))
|
|
509
|
+
announceEdge(pointA, pointB, indexA, indexB, e1.facetIndex);
|
|
519
510
|
}
|
|
520
511
|
}
|
|
521
512
|
/**
|
|
@@ -540,7 +531,7 @@ class PolyfaceQuery {
|
|
|
540
531
|
* Collect boundary edges.
|
|
541
532
|
* * Return the edges as the simplest collection of chains of line segments.
|
|
542
533
|
* @param source polyface or visitor.
|
|
543
|
-
* @param includeTypical true to
|
|
534
|
+
* @param includeTypical true to include typical boundary edges with a single adjacent facet.
|
|
544
535
|
* @param includeMismatch true to include edges with more than 2 adjacent facets.
|
|
545
536
|
* @param includeNull true to include edges with identical start and end vertex indices.
|
|
546
537
|
*/
|
|
@@ -785,18 +776,18 @@ class PolyfaceQuery {
|
|
|
785
776
|
}
|
|
786
777
|
/**
|
|
787
778
|
* Search for edges with only 1 adjacent facet.
|
|
788
|
-
* *
|
|
789
|
-
* * Emit the
|
|
779
|
+
* * Accumulate them into chains.
|
|
780
|
+
* * Emit the chains to the `announceChain` callback.
|
|
790
781
|
*/
|
|
791
|
-
static announceBoundaryChainsAsLineString3d(mesh,
|
|
792
|
-
const collector = new MultiChainCollector_1.MultiChainCollector(Geometry_1.Geometry.smallMetricDistance
|
|
782
|
+
static announceBoundaryChainsAsLineString3d(mesh, announceChain) {
|
|
783
|
+
const collector = new MultiChainCollector_1.MultiChainCollector(Geometry_1.Geometry.smallMetricDistance); // no planarity tolerance needed
|
|
793
784
|
PolyfaceQuery.announceBoundaryEdges(mesh, (pointA, pointB, _indexA, _indexB) => collector.captureCurve(LineSegment3d_1.LineSegment3d.create(pointA, pointB)), true, false, false);
|
|
794
|
-
collector.announceChainsAsLineString3d(
|
|
785
|
+
collector.announceChainsAsLineString3d(announceChain);
|
|
795
786
|
}
|
|
796
787
|
/**
|
|
797
788
|
* Return a mesh with
|
|
798
|
-
* * clusters of adjacent, coplanar facets merged into larger facets.
|
|
799
|
-
* * other facets
|
|
789
|
+
* * clusters of adjacent, coplanar facets merged into larger (possibly non-convex) facets.
|
|
790
|
+
* * other facets are unchanged.
|
|
800
791
|
* @param mesh existing mesh or visitor.
|
|
801
792
|
* @param maxSmoothEdgeAngle maximum dihedral angle across an edge between facets deemed coplanar. If undefined,
|
|
802
793
|
* uses `Geometry.smallAngleRadians`.
|
|
@@ -810,42 +801,58 @@ class PolyfaceQuery {
|
|
|
810
801
|
const builder = PolyfaceBuilder_1.PolyfaceBuilder.create();
|
|
811
802
|
const visitor = mesh;
|
|
812
803
|
const planarPartitions = [];
|
|
804
|
+
const partitionNormals = []; // average normal in each nontrivial partition
|
|
805
|
+
const normal = Point3dVector3d_1.Vector3d.createZero();
|
|
813
806
|
for (const partition of partitions) {
|
|
814
807
|
if (partition.length === 1) {
|
|
815
808
|
if (visitor.moveToReadIndex(partition[0]))
|
|
816
809
|
builder.addFacetFromVisitor(visitor);
|
|
817
810
|
}
|
|
818
|
-
else {
|
|
819
|
-
|
|
811
|
+
else if (partition.length > 1) { // nontrivial set of contiguous coplanar facets
|
|
812
|
+
const averageNormal = Point3dVector3d_1.Vector3d.createZero();
|
|
813
|
+
const point0 = Point3dVector3d_1.Point3d.createZero();
|
|
814
|
+
if (visitor.moveToReadIndex(partition[0]))
|
|
815
|
+
visitor.point.getPoint3dAtCheckedPointIndex(0, point0);
|
|
816
|
+
for (const facetIndex of partition) {
|
|
817
|
+
if (visitor.moveToReadIndex(facetIndex))
|
|
818
|
+
if (PolygonOps_1.PolygonOps.areaNormalGo(visitor.point, normal))
|
|
819
|
+
averageNormal.addInPlace(normal);
|
|
820
|
+
}
|
|
821
|
+
partitionNormals.push(Ray3d_1.Ray3d.createCapture(point0, averageNormal));
|
|
820
822
|
planarPartitions.push(partition);
|
|
821
823
|
}
|
|
822
824
|
}
|
|
823
825
|
const fragmentPolyfaces = PolyfaceQuery.clonePartitions(mesh, planarPartitions);
|
|
826
|
+
(0, core_bentley_1.assert)(planarPartitions.length === partitionNormals.length);
|
|
827
|
+
(0, core_bentley_1.assert)(planarPartitions.length === fragmentPolyfaces.length);
|
|
824
828
|
const gapTolerance = 1.0e-4;
|
|
825
829
|
const planarityTolerance = 1.0e-4;
|
|
826
|
-
|
|
830
|
+
const localToWorld = Transform_1.Transform.createIdentity();
|
|
831
|
+
const worldToLocal = Transform_1.Transform.createIdentity();
|
|
832
|
+
for (let i = 0; i < fragmentPolyfaces.length; ++i) {
|
|
833
|
+
const fragment = fragmentPolyfaces[i];
|
|
827
834
|
const edges = [];
|
|
828
835
|
const edgeStrings = [];
|
|
829
836
|
PolyfaceQuery.announceBoundaryEdges(fragment, (pointA, pointB, _indexA, _indexB) => {
|
|
830
837
|
edges.push(LineSegment3d_1.LineSegment3d.create(pointA, pointB));
|
|
831
838
|
edgeStrings.push([pointA.clone(), pointB.clone()]);
|
|
832
|
-
});
|
|
839
|
+
}, true, false, false);
|
|
833
840
|
const chains = CurveOps_1.CurveOps.collectChains(edges, gapTolerance, planarityTolerance);
|
|
834
841
|
if (chains) {
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
if
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
842
|
+
// avoid FrameBuilder: it can flip the normal of a nonconvex facet!
|
|
843
|
+
partitionNormals[i].toRigidZFrame(localToWorld);
|
|
844
|
+
if (localToWorld.inverse(worldToLocal)) {
|
|
845
|
+
worldToLocal.multiplyPoint3dArrayArrayInPlace(edgeStrings);
|
|
846
|
+
// Regularize adds bridge edges to holes, and adds other edges to aid triangulation.
|
|
847
|
+
// But we aren't triangulating here. So if we don't have holes, we can skip regularization
|
|
848
|
+
// to avoid splitting the loop.
|
|
849
|
+
const regularize = !(chains instanceof Loop_1.Loop);
|
|
850
|
+
const graph = Merging_1.HalfEdgeGraphMerge.formGraphFromChains(edgeStrings, regularize, Graph_1.HalfEdgeMask.BOUNDARY_EDGE);
|
|
851
|
+
if (graph) {
|
|
852
|
+
HalfEdgeGraphSearch_1.HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, new HalfEdgeGraphSearch_1.HalfEdgeMaskTester(Graph_1.HalfEdgeMask.BOUNDARY_EDGE), Graph_1.HalfEdgeMask.EXTERIOR);
|
|
853
|
+
// this.purgeNullFaces(HalfEdgeMask.EXTERIOR);
|
|
854
|
+
const polyface1 = PolyfaceBuilder_1.PolyfaceBuilder.graphToPolyface(graph);
|
|
855
|
+
builder.addIndexedPolyface(polyface1, false, localToWorld);
|
|
849
856
|
}
|
|
850
857
|
}
|
|
851
858
|
}
|