@itwin/core-geometry 5.1.1 → 5.1.3-experimental.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -1
- package/lib/cjs/Constant.js.map +1 -1
- 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.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +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.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.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.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/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.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.js.map +1 -1
- 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.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.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.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.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.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.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.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.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/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- 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.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.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.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.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.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.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +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.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.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.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/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.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.js.map +1 -1
- 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.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.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.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.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.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.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.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/SmallSystem.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/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- 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.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.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.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.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceBuilder.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { ConstructCurveBetweenCurves } from \"../curve/ConstructCurveBetweenCurves\";\nimport { CurveChain, CurveCollection } from \"../curve/CurveCollection\";\nimport { CurveFactory, MiteredSweepOutputSelect } from \"../curve/CurveFactory\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { AnyCurve, AnyRegion } from \"../curve/CurveTypes\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { CylindricalRangeQuery } from \"../curve/Query/CylindricalRange\";\nimport { StrokeCountSection } from \"../curve/Query/StrokeCountChain\";\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { BilinearPatch } from \"../geometry3d/BilinearPatch\";\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\nimport { NullGeometryHandler, UVSurface } from \"../geometry3d/GeometryHandler\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3dArrayCarrier } from \"../geometry3d/Point3dArrayCarrier\";\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\nimport { Segment1d } from \"../geometry3d/Segment1d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { UVSurfaceOps } from \"../geometry3d/UVSurfaceOps\";\nimport { XAndY } from \"../geometry3d/XYZProps\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { SweepContour } from \"../solid/SweepContour\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeToBooleanFunction } from \"../topology/Graph\";\nimport { InsertedVertexZOptions } from \"../topology/InsertAndRetriangulateContext\";\nimport { Triangulator } from \"../topology/Triangulation\";\nimport { BoxTopology } from \"./BoxTopology\";\nimport { GreedyTriangulationBetweenLineStrings } from \"./GreedyTriangulationBetweenLineStrings\";\nimport { SortableEdge, SortableEdgeCluster } from \"./IndexedEdgeMatcher\";\nimport { IndexedPolyfaceSubsetVisitor } from \"./IndexedPolyfaceVisitor\";\nimport { IndexedPolyface, PolyfaceVisitor } from \"./Polyface\";\nimport { PolyfaceQuery } from \"./PolyfaceQuery\";\n\n/**\n * A FacetSector.\n * * Initially holds coordinate data for a place where xyz and sectionDerivative are known.\n * * Normal is computed as a deferred step using an edge to adjacent place on ruled surface.\n * * Indices are set up even later.\n */\nclass FacetSector {\n public xyz: Point3d;\n public xyzIndex: number;\n public normal?: Vector3d;\n public normalIndex: number;\n public uv?: Point2d;\n public uvIndex: number;\n public sectionDerivative?: Vector3d;\n public constructor(needNormal: boolean = false, needUV: boolean = false, needSectionDerivative: boolean = false) {\n this.xyz = Point3d.create();\n this.normalIndex = -1;\n this.uvIndex = -1;\n this.xyzIndex = -1;\n if (needNormal) {\n this.normal = Vector3d.create();\n }\n if (needUV) {\n this.uv = Point2d.create();\n this.uvIndex = -1;\n }\n if (needSectionDerivative) {\n this.sectionDerivative = Vector3d.create();\n }\n }\n /**\n * Copy contents (not pointers) from `other`.\n * * ASSUME all fields defined in the instance are defined in `other`.\n */\n public copyContentsFrom(other: FacetSector) {\n this.xyz.setFromPoint3d(other.xyz);\n this.xyzIndex = other.xyzIndex;\n if (this.normal)\n this.normal.setFromVector3d(other.normal);\n this.normalIndex = other.normalIndex;\n if (this.uv)\n this.uv.setFrom(other.uv);\n this.uvIndex = other.uvIndex;\n if (this.sectionDerivative)\n this.sectionDerivative.setFrom(other.sectionDerivative);\n }\n /**\n * Access xyz, derivative from given arrays.\n * * ASSUME corresponding defined conditions.\n * * xyz and derivative are set.\n * * Index fields for updated data are cleared to -1.\n */\n public loadIndexedPointAndDerivativeCoordinatesFromPackedArrays(\n i: number,\n packedXYZ: GrowableXYZArray,\n packedDerivatives?: GrowableXYZArray,\n fractions?: GrowableFloat64Array,\n v?: number,\n ): void {\n packedXYZ.getPoint3dAtCheckedPointIndex(i, this.xyz);\n if (this.uv && fractions && v !== undefined)\n this.uv.set(fractions.atUncheckedIndex(i), v);\n this.xyzIndex = -1;\n this.normalIndex = -1;\n this.uvIndex = -1;\n if (this.sectionDerivative !== undefined && packedDerivatives !== undefined)\n packedDerivatives.getVector3dAtCheckedVectorIndex(i, this.sectionDerivative);\n }\n private static suppressSmallUnitVectorComponents(uvw: XYZ): void {\n const tol = Geometry.smallFloatingPoint;\n if (Math.abs(uvw.x) < tol)\n uvw.x = 0.0;\n if (Math.abs(uvw.y) < tol)\n uvw.y = 0.0;\n if (Math.abs(uvw.z) < tol)\n uvw.z = 0.0;\n }\n private static _edgeVector: Vector3d = Vector3d.create();\n /**\n * Given two sectors with xyz and sectionDerivative (u derivative), use the edge from A to B as v direction\n * in-surface derivative. Compute cross products (and normalize).\n * @param sectorA \"lower\" sector.\n * @param sectorB \"upper\" sector.\n */\n public static computeNormalsAlongRuleLine(sectorA: FacetSector, sectorB: FacetSector) {\n // We expect that if a sector's sectionDerivative is defined, then so is its normal. If a normal is undefined, the\n // crossProduct returns an object that goes unused---not good, but the garbage collector will clean it up.\n if (sectorA.sectionDerivative && sectorB.sectionDerivative) {\n const vectorAB = FacetSector._edgeVector;\n Vector3d.createStartEnd(sectorA.xyz, sectorB.xyz, vectorAB);\n sectorA.sectionDerivative.crossProduct(vectorAB, sectorA.normal);\n sectorB.sectionDerivative.crossProduct(vectorAB, sectorB.normal);\n sectorA.normal!.normalizeInPlace();\n sectorB.normal!.normalizeInPlace();\n FacetSector.suppressSmallUnitVectorComponents(sectorA.normal!);\n FacetSector.suppressSmallUnitVectorComponents(sectorB.normal!);\n }\n }\n}\n\n/**\n * * Simple construction for strongly typed GeometryQuery objects:\n *\n * * Create a builder with `builder = PolyfaceBuilder.create()`\n * * Add GeometryQuery objects:\n * * `builder.addGeometryQuery(g: GeometryQuery)`\n * * `builder.addCone(cone: Cone)`\n * * `builder.addTorusPipe(surface: TorusPipe)`\n * * `builder.addLinearSweepLineStringsXYZOnly(surface: LinearSweep)`\n * * `builder.addRotationalSweep(surface: RotationalSweep)`\n * * `builder.addLinearSweep(surface: LinearSweep)`\n * * `builder.addRuledSweep(surface: RuledSweep)`\n * * `builder.addSphere(sphere: Sphere)`\n * * `builder.addBox(box: Box)`\n * * `builder.addIndexedPolyface(polyface)`\n * * Extract with `builder.claimPolyface(true)`\n *\n * * Simple construction for ephemeral constructive data:\n *\n * * Create a builder with `builder = PolyfaceBuilder.create()`\n * * Add from fragmentary data:\n * * `builder.addBetweenLineStringsWithStoredIndices(linestringA linestringB)`\n * * `builder.addBetweenLineStringsWithRuleEdgeNormals(linestringA, vA, linestringB, vB, addClosure)`\n * * `builder.addBetweenTransformedLineStrings(curves, transformA, transformB, addClosure)`\n * * `builder.addLinearSweepLineStringsXYZOnly(contour, vector)`\n * * `builder.addPolygon(points, numPointsToUse)`\n * * `builder.addTransformedUnitBox(transform)`\n * * `builder.addTriangleFan(conePoint, linestring, toggleOrientation)`\n * * `builder.addTrianglesInUncheckedConvexPolygon(linestring, toggle)`\n * * `builder.addUVGridBody(surface,numU, numV, createFanInCaps)`\n * * `builder.addGraph(Graph, acceptFaceFunction)`\n * * Extract with `builder.claimPolyface(true)`\n *\n * * Low-level detail construction -- direct use of indices:\n *\n * * Create a builder with `builder = PolyfaceBuilder.create()`\n * * Add GeometryQuery objects\n * * `builder.addPoint(point)`\n * * `builder.findOrAddPointInLineString(linestring, index)`\n * * `builder.addPointXYZ(x,y,z)`\n * * `builder.addTriangleFacet(points)`\n * * `builder.addQuadFacet(points)`\n * @public\n */\nexport class PolyfaceBuilder extends NullGeometryHandler {\n private _polyface: IndexedPolyface;\n private _options: StrokeOptions;\n /** Return (pointer to) the `StrokeOptions` in use by the builder. */\n public get options(): StrokeOptions {\n return this._options;\n }\n /** State data that affects the current construction. **/\n private _reversed: boolean;\n /** Ask if this builder is reversing vertex order as loops are received. */\n public get reversedFlag(): boolean {\n return this._reversed;\n }\n /**\n * Extract the polyface.\n * @param compress whether to cluster vertices (default `true`).\n * @param tolerance compression tolerance (default `Geometry.smallMetricDistance`).\n */\n public claimPolyface(compress: boolean = true, tolerance: number = Geometry.smallMetricDistance): IndexedPolyface {\n if (compress)\n this._polyface.data.compress(tolerance);\n return this._polyface;\n }\n /** Toggle (reverse) the flag controlling orientation flips for newly added facets. */\n public toggleReversedFacetFlag() {\n this._reversed = !this._reversed;\n }\n private constructor(options?: StrokeOptions) {\n super();\n this._options = options ? options : StrokeOptions.createForFacets();\n this._polyface = IndexedPolyface.create(\n this._options.needNormals, this._options.needParams, this._options.needColors, this._options.needTwoSided,\n );\n this._reversed = false;\n }\n /**\n * Create a builder with given StrokeOptions.\n * @param options StrokeOptions (captured).\n */\n public static create(options?: StrokeOptions): PolyfaceBuilder {\n return new PolyfaceBuilder(options);\n }\n /** Add facets for a transformed unit box. */\n public addTransformedUnitBox(transform: Transform) {\n this.addTransformedRangeMesh(transform, Range3d.createXYZXYZ(0, 0, 0, 1, 1, 1));\n }\n /**\n * Add facets for a transformed range box.\n * * For best results, the transformed range corners should define a nonzero volume or area.\n * @param transform applied to the range points before adding to the polyface.\n * @param range sides become 6 quad polyface facets.\n * @param faceSelector for each face in the order of `BoxTopology.cornerIndexCCW`, `faceSelector[i] === false` skips\n * that facet.\n */\n public addTransformedRangeMesh(transform: Transform, range: Range3d, faceSelector?: boolean[]): void {\n const pointIndex0 = this._polyface.data.pointCount;\n // these will have sequential indices starting at pointIndex0\n const points = range.corners();\n for (const p of points)\n this._polyface.addPoint(transform.multiplyPoint3d(p));\n let faceCounter = 0;\n for (const facet of BoxTopology.cornerIndexCCW) {\n if (!faceSelector || (faceCounter < faceSelector.length && faceSelector[faceCounter])) {\n const myFacet = facet.map((pointIndex) => pointIndex + pointIndex0);\n if (this._reversed)\n myFacet.reverse();\n if (this._options.shouldTriangulate) {\n this.addIndexedTrianglePointIndexes(myFacet[0], myFacet[1], myFacet[2], false);\n this.addIndexedTrianglePointIndexes(myFacet[0], myFacet[2], myFacet[3], false);\n } else {\n this.addIndexedQuadPointIndexes(myFacet[0], myFacet[1], myFacet[3], myFacet[2], false);\n }\n this._polyface.terminateFacet();\n }\n faceCounter++;\n }\n }\n /**\n * Add triangles from `conePoint` to each far edge.\n * @param conePoint the common vertex of all triangles.\n * @param ls linestring with point coordinates.\n * @param toggle if `true`, wrap the triangle creation in toggleReversedFacetFlag.\n */\n public addTriangleFan(conePoint: Point3d, ls: LineString3d, toggle: boolean): void {\n const n = ls.numPoints();\n if (n > 2) {\n if (toggle)\n this.toggleReversedFacetFlag();\n const index0 = this.addPoint(conePoint);\n let index1 = this.findOrAddPointInLineString(ls, 0)!;\n let index2 = 0;\n for (let i = 1; i < n; i++) {\n index2 = this.findOrAddPointInLineString(ls, i)!;\n this.addIndexedTrianglePointIndexes(index0, index1, index2);\n index1 = index2;\n }\n if (toggle)\n this.toggleReversedFacetFlag();\n }\n }\n /**\n * Add triangles from the first point of the linestring to the subsequent edges of the linestring.\n * * No checks are made for polygon convexity or edge collinearity, conditions which would ensure positive area triangles.\n * @param ls linestring with point coordinates.\n * @param reverse if `true`, wrap the triangle creation in toggleReversedFacetFlag.\n */\n public addTrianglesInUncheckedConvexPolygon(ls: LineString3d, toggle: boolean): void {\n const n = ls.numPoints();\n if (n > 2) {\n if (toggle)\n this.toggleReversedFacetFlag();\n let normal;\n let normalIndex;\n if (this._options.needNormals) {\n normal = ls.quickUnitNormal(PolyfaceBuilder._workVectorFindOrAdd)!;\n if (toggle)\n normal.scaleInPlace(-1.0);\n normalIndex = this._polyface.addNormal(normal);\n }\n const needParams = this._options.needParams;\n const packedUV = needParams ? ls.packedUVParams : undefined;\n let paramIndex0 = -1;\n let paramIndex1 = -1;\n let paramIndex2 = -1;\n if (packedUV) {\n paramIndex0 = this.addParamInGrowableXYArray(packedUV, 0)!;\n paramIndex1 = this.addParamInGrowableXYArray(packedUV, 1)!;\n }\n const pointIndex0 = this.findOrAddPointInLineString(ls, 0)!;\n let pointIndex1 = this.findOrAddPointInLineString(ls, 1)!;\n let pointIndex2 = 0;\n let numEdge = n;\n if (ls.isPhysicallyClosed)\n numEdge--;\n for (let i = 2; i < numEdge; i++, pointIndex1 = pointIndex2, paramIndex1 = paramIndex2) {\n pointIndex2 = this.findOrAddPointInLineString(ls, i)!;\n this.addIndexedTrianglePointIndexes(pointIndex0, pointIndex1, pointIndex2, false);\n if (normalIndex !== undefined)\n this.addIndexedTriangleNormalIndexes(normalIndex, normalIndex, normalIndex);\n if (packedUV) {\n paramIndex2 = this.addParamInGrowableXYArray(packedUV, i)!;\n this.addIndexedTriangleParamIndexes(paramIndex0, paramIndex1, paramIndex2);\n }\n this._polyface.terminateFacet();\n }\n if (toggle)\n this.toggleReversedFacetFlag();\n }\n }\n /** Add a point to the polyface. */\n public addPoint(xyz: Point3d): number {\n return this._polyface.addPoint(xyz);\n }\n /** Add a uv parameter to the polyface. */\n public addParamXY(x: number, y: number): number {\n return this._polyface.addParamUV(x, y);\n }\n private static _workPointFindOrAddA = Point3d.create();\n private static _workVectorFindOrAdd = Vector3d.create();\n private static _workUVFindOrAdd = Point2d.create();\n /**\n * Add a point to the polyface. The implementation is free to either create a new point or return the index of a\n * prior point with the same coordinates.\n * @param ls the linestring.\n * @param index index of the point in the linestring.\n * @param transform (optional) transform to be applied.\n * @param priorIndex (optional) index of a prior point to check for possible duplicate value.\n * @returns the point index in the polyface.\n */\n public findOrAddPointInLineString(\n ls: LineString3d, index: number, transform?: Transform, priorIndex?: number,\n ): number | undefined {\n const q = ls.pointAt(index, PolyfaceBuilder._workPointFindOrAddA);\n if (q) {\n if (transform)\n transform.multiplyPoint3d(q, q);\n return this._polyface.addPoint(q, priorIndex);\n }\n return undefined;\n }\n /**\n * Add a point to the polyface. The implementation is free to either create a new point or return the index of a\n * prior point with the same coordinates.\n * @param xyz the array of points.\n * @param index index of the point in the array.\n * @param transform (optional) transform to be applied.\n * @param priorIndex (optional) index of a prior point to check for possible duplicate value.\n * @returns the point index in the polyface.\n */\n public findOrAddPointInGrowableXYZArray(\n xyz: GrowableXYZArray, index: number, transform?: Transform, priorIndex?: number,\n ): number | undefined {\n const q = xyz.getPoint3dAtCheckedPointIndex(index, PolyfaceBuilder._workPointFindOrAddA);\n if (q) {\n if (transform)\n transform.multiplyPoint3d(q, q);\n return this._polyface.addPoint(q, priorIndex);\n }\n return undefined;\n }\n /**\n * Add a normal to the polyface. The implementation is free to either create a new normal or return the index of a\n * prior normal with the same coordinates.\n * @param xyz the array of normals.\n * @param index index of the normal in the array.\n * @param transform (optional) transform to be applied.\n * @param priorIndex (optional) index of a prior point to check for possible duplicate value.\n * @returns the normal index in the polyface.\n */\n public findOrAddNormalInGrowableXYZArray(\n xyz: GrowableXYZArray, index: number, transform?: Transform, priorIndex?: number,\n ): number | undefined {\n const q = xyz.getVector3dAtCheckedVectorIndex(index, PolyfaceBuilder._workVectorFindOrAdd);\n if (q) {\n if (transform)\n transform.multiplyVector(q, q);\n return this._polyface.addNormal(q, priorIndex);\n }\n return undefined;\n }\n /**\n * Add a uv parameter to the polyface.\n * @param data the array of uv data.\n * @param index index of the param in the array.\n * @returns the uv parameter index in the polyface.\n */\n public addParamInGrowableXYArray(data: GrowableXYArray, index: number): number | undefined {\n if (!data)\n return undefined;\n const q = data.getPoint2dAtCheckedPointIndex(index, PolyfaceBuilder._workUVFindOrAdd);\n if (q)\n return this._polyface.addParam(q);\n return undefined;\n }\n /**\n * Add a uv parameter to the polyface, taking `u` from `ls.fractions` and `v` from input. The implementation is\n * free to either create a new param or return the index of a prior param with the same coordinates.\n * @param ls the linestring.\n * @param index index of the point in the linestring.\n * @param v the v parameter.\n * @param priorIndexA (optional) an index of a prior param to check for possible duplicate value.\n * @param priorIndexB (optional) another index of a prior param to check for possible duplicate value.\n * @returns the uv parameter index in the polyface.\n */\n public findOrAddParamInLineString(\n ls: LineString3d, index: number, v: number, priorIndexA?: number, priorIndexB?: number,\n ): number | undefined {\n const u = (ls.fractions && index < ls.fractions.length) ?\n ls.fractions.atUncheckedIndex(index) : index / ls.points.length;\n return this._polyface.addParamUV(u, v, priorIndexA, priorIndexB);\n }\n /**\n * Add a normal to the polyface.\n * @param ls the linestring.\n * @param index Index of the normal in the linestring's surface normal array.\n * @param transform (optional) transform to be applied.\n * @param priorIndexA (optional) an index of a prior normal to check for possible duplicate value.\n * @param priorIndexB (optional) another index of a prior normal to check for possible duplicate value.\n * @returns the normal index in the polyface.\n */\n public findOrAddNormalInLineString(\n ls: LineString3d, index: number, transform?: Transform, priorIndexA?: number, priorIndexB?: number,\n ): number | undefined {\n const linestringNormals = ls.packedSurfaceNormals;\n if (linestringNormals) {\n const q = linestringNormals.getVector3dAtCheckedVectorIndex(index, PolyfaceBuilder._workVectorFindOrAdd);\n if (q) {\n if (transform)\n transform.multiplyVector(q, q);\n return this._polyface.addNormal(q, priorIndexA, priorIndexB);\n }\n }\n return undefined;\n }\n /** Add a point to the polyface. */\n public addPointXYZ(x: number, y: number, z: number): number {\n return this._polyface.addPointXYZ(x, y, z);\n }\n /** Returns a transform who can be applied to points on a triangular facet in order to obtain UV parameters. */\n private getUVTransformForTriangleFacet(pointA: Point3d, pointB: Point3d, pointC: Point3d): Transform | undefined {\n const vectorAB = pointA.vectorTo(pointB);\n const vectorAC = pointA.vectorTo(pointC);\n const unitAxes = Matrix3d.createRigidFromColumns(vectorAB, vectorAC, AxisOrder.XYZ);\n const localToWorld = Transform.createOriginAndMatrix(pointA, unitAxes);\n return localToWorld.inverse();\n }\n /** Returns the normal to a triangular facet. */\n private getNormalForTriangularFacet(pointA: Point3d, pointB: Point3d, pointC: Point3d): Vector3d {\n const vectorAB = pointA.vectorTo(pointB);\n const vectorAC = pointA.vectorTo(pointC);\n let normal = vectorAB.crossProduct(vectorAC).normalize();\n normal = normal ? normal : Vector3d.create();\n return normal;\n }\n // ### TODO: Consider case where normals will be reversed and point through the other end of the facet.\n /**\n * Add a quad to the polyface given its points in order around the edges.\n * @param points array of at least four vertices.\n * @param params (optional) array of at least four uv parameters (if `undefined`, params are calculated without\n * reference data).\n * @param normals (optional) array of at least four vectors (if `undefined`, the quad is assumed to be planar and its\n * normal is calculated).\n * @param colors (optional) array of at least four colors.\n */\n public addQuadFacet(\n points: Point3d[] | GrowableXYZArray, params?: Point2d[], normals?: Vector3d[], colors?: number[],\n ): void {\n if (points instanceof GrowableXYZArray)\n points = points.getPoint3dArray();\n if (points.length < 4)\n return;\n // if params and/or normals are needed, calculate them first\n const needParams = this.options.needParams;\n const needNormals = this.options.needNormals;\n const needColors = this.options.needColors;\n let param0: Point2d, param1: Point2d, param2: Point2d, param3: Point2d;\n let normal0: Vector3d, normal1: Vector3d, normal2: Vector3d, normal3: Vector3d;\n let color0: number, color1: number, color2: number, color3: number;\n if (needParams) {\n if (params !== undefined && params.length > 3) {\n param0 = params[0];\n param1 = params[1];\n param2 = params[2];\n param3 = params[3];\n } else {\n const paramTransform = this.getUVTransformForTriangleFacet(points[0], points[1], points[2]);\n if (paramTransform === undefined) {\n param0 = param1 = param2 = param3 = Point2d.createZero();\n } else {\n param0 = Point2d.createFrom(paramTransform.multiplyPoint3d(points[0]));\n param1 = Point2d.createFrom(paramTransform.multiplyPoint3d(points[1]));\n param2 = Point2d.createFrom(paramTransform.multiplyPoint3d(points[2]));\n param3 = Point2d.createFrom(paramTransform.multiplyPoint3d(points[3]));\n }\n }\n }\n if (needNormals) {\n if (normals !== undefined && normals.length > 3) {\n normal0 = normals[0];\n normal1 = normals[1];\n normal2 = normals[2];\n normal3 = normals[3];\n } else {\n normal0 = this.getNormalForTriangularFacet(points[0], points[1], points[2]);\n normal1 = this.getNormalForTriangularFacet(points[0], points[1], points[2]);\n normal2 = this.getNormalForTriangularFacet(points[0], points[1], points[2]);\n normal3 = this.getNormalForTriangularFacet(points[0], points[1], points[2]);\n }\n }\n if (needColors) {\n if (colors !== undefined && colors.length > 3) {\n color0 = colors[0];\n color1 = colors[1];\n color2 = colors[2];\n color3 = colors[3];\n }\n }\n if (this._options.shouldTriangulate) {\n // add as two triangles, with a diagonal along the shortest distance\n const vectorAC = points[0].vectorTo(points[2]);\n const vectorBD = points[1].vectorTo(points[3]);\n // Note: We pass along any values for normals or params that we calculated\n if (vectorAC.magnitude() >= vectorBD.magnitude()) {\n this.addTriangleFacet(\n [points[0], points[1], points[2]],\n needParams ? [param0!, param1!, param2!] : undefined,\n needNormals ? [normal0!, normal1!, normal2!] : undefined,\n needColors ? [color0!, color1!, color2!] : undefined,\n );\n this.addTriangleFacet(\n [points[0], points[2], points[3]],\n needParams ? [param0!, param2!, param3!] : undefined,\n needNormals ? [normal0!, normal2!, normal3!] : undefined,\n needColors ? [color0!, color2!, color3!] : undefined,\n );\n } else {\n this.addTriangleFacet(\n [points[0], points[1], points[3]],\n needParams ? [param0!, param1!, param3!] : undefined,\n needNormals ? [normal0!, normal1!, normal3!] : undefined,\n needColors ? [color0!, color1!, color3!] : undefined,\n );\n this.addTriangleFacet(\n [points[1], points[2], points[3]],\n needParams ? [param1!, param2!, param3!] : undefined,\n needNormals ? [normal1!, normal2!, normal3!] : undefined,\n needColors ? [color1!, color2!, color3!] : undefined,\n );\n }\n return;\n }\n let idx0, idx1, idx2, idx3;\n // add params if needed\n if (needParams) {\n idx0 = this._polyface.addParam(param0!);\n idx1 = this._polyface.addParam(param1!);\n idx2 = this._polyface.addParam(param2!);\n idx3 = this._polyface.addParam(param3!);\n this.addIndexedQuadParamIndexes(idx0, idx1, idx3, idx2);\n }\n // add normals if needed\n if (needNormals) {\n idx0 = this._polyface.addNormal(normal0!);\n idx1 = this._polyface.addNormal(normal1!);\n idx2 = this._polyface.addNormal(normal2!);\n idx3 = this._polyface.addNormal(normal3!);\n this.addIndexedQuadNormalIndexes(idx0, idx1, idx3, idx2);\n }\n // add colors if needed\n if (needColors) {\n idx0 = this._polyface.addColor(color0!);\n idx1 = this._polyface.addColor(color1!);\n idx2 = this._polyface.addColor(color2!);\n idx3 = this._polyface.addColor(color3!);\n this.addIndexedQuadColorIndexes(idx0, idx1, idx3, idx2);\n }\n // add point and point indexes last (terminates the facet)\n idx0 = this.addPoint(points[0]);\n idx1 = this.addPoint(points[1]);\n idx2 = this.addPoint(points[2]);\n idx3 = this.addPoint(points[3]);\n this.addIndexedQuadPointIndexes(idx0, idx1, idx3, idx2);\n }\n /**\n * Add a single quad facet from existing points to the polyface.\n * * The actual quad may be reversed or triangulated based on builder setup.\n * * `indexA0` and `indexA1` are in the forward order at the \"A\" end of the quad\n * * `indexB0` and `indexB1` are in the forward order at the \"B\" end of the quad.\n * * This means ccw/cw ordered vertices v[i] should be passed into this function as i=[0,1,3,2].\n */\n private addIndexedQuadPointIndexes(\n indexA0: number, indexA1: number, indexB0: number, indexB1: number, terminate: boolean = true,\n ): void {\n if (this._reversed) {\n this._polyface.addPointIndex(indexA0);\n this._polyface.addPointIndex(indexB0);\n this._polyface.addPointIndex(indexB1);\n this._polyface.addPointIndex(indexA1);\n } else {\n this._polyface.addPointIndex(indexA0);\n this._polyface.addPointIndex(indexA1);\n this._polyface.addPointIndex(indexB1);\n this._polyface.addPointIndex(indexB0);\n }\n if (terminate)\n this._polyface.terminateFacet();\n }\n /** For a single quad facet, add the indexes of the corresponding param points. */\n private addIndexedQuadParamIndexes(indexA0: number, indexA1: number, indexB0: number, indexB1: number): void {\n if (this._reversed) {\n this._polyface.addParamIndex(indexA0);\n this._polyface.addParamIndex(indexB0);\n this._polyface.addParamIndex(indexB1);\n this._polyface.addParamIndex(indexA1);\n } else {\n this._polyface.addParamIndex(indexA0);\n this._polyface.addParamIndex(indexA1);\n this._polyface.addParamIndex(indexB1);\n this._polyface.addParamIndex(indexB0);\n }\n }\n /** For a single quad facet, add the indexes of the corresponding normal vectors. */\n private addIndexedQuadNormalIndexes(indexA0: number, indexA1: number, indexB0: number, indexB1: number): void {\n if (this._reversed) {\n this._polyface.addNormalIndex(indexA0);\n this._polyface.addNormalIndex(indexB0);\n this._polyface.addNormalIndex(indexB1);\n this._polyface.addNormalIndex(indexA1);\n } else {\n this._polyface.addNormalIndex(indexA0);\n this._polyface.addNormalIndex(indexA1);\n this._polyface.addNormalIndex(indexB1);\n this._polyface.addNormalIndex(indexB0);\n }\n }\n /** For a single quad facet, add the indexes of the corresponding colors. */\n private addIndexedQuadColorIndexes(indexA0: number, indexA1: number, indexB0: number, indexB1: number): void {\n if (this._reversed) {\n this._polyface.addColorIndex(indexA0);\n this._polyface.addColorIndex(indexB0);\n this._polyface.addColorIndex(indexB1);\n this._polyface.addColorIndex(indexA1);\n } else {\n this._polyface.addColorIndex(indexA0);\n this._polyface.addColorIndex(indexA1);\n this._polyface.addColorIndex(indexB1);\n this._polyface.addColorIndex(indexB0);\n }\n }\n // ### TODO: Consider case where normals will be reversed and point through the other end of the facet.\n /**\n * Add a triangle to the polyface given its points in order around the edges.\n * @param points array of at least three vertices.\n * @param params (optional) array of at least three uv parameters (if `undefined`, params are calculated without\n * reference data).\n * @param normals (optional) array of at least three vectors (if `undefined`, the normal is calculated).\n * @param colors (optional) array of at least three colors.\n */\n public addTriangleFacet(\n points: Point3d[] | GrowableXYZArray, params?: Point2d[], normals?: Vector3d[], colors?: number[],\n ): void {\n if (points.length < 3)\n return;\n let idx0: number;\n let idx1: number;\n let idx2: number;\n let point0, point1, point2;\n if (points instanceof GrowableXYZArray) {\n point0 = points.getPoint3dAtCheckedPointIndex(0)!;\n point1 = points.getPoint3dAtCheckedPointIndex(1)!;\n point2 = points.getPoint3dAtCheckedPointIndex(2)!;\n } else {\n point0 = points[0];\n point1 = points[1];\n point2 = points[2];\n }\n // add params if needed\n if (this._options.needParams) {\n if (params && params.length >= 3) { // params were given\n idx0 = this._polyface.addParam(params[0]);\n idx1 = this._polyface.addParam(params[1]);\n idx2 = this._polyface.addParam(params[2]);\n } else { // compute params\n const paramTransform = this.getUVTransformForTriangleFacet(point0, point1, point2);\n idx0 = this._polyface.addParam(\n Point2d.createFrom(paramTransform ? paramTransform.multiplyPoint3d(point0) : undefined),\n );\n idx1 = this._polyface.addParam(\n Point2d.createFrom(paramTransform ? paramTransform.multiplyPoint3d(point1) : undefined),\n );\n idx2 = this._polyface.addParam(\n Point2d.createFrom(paramTransform ? paramTransform.multiplyPoint3d(point1) : undefined),\n );\n }\n this.addIndexedTriangleParamIndexes(idx0, idx1, idx2);\n }\n // add normals if needed\n if (this._options.needNormals) {\n if (normals !== undefined && normals.length > 2) { // normals were given\n idx0 = this._polyface.addNormal(normals[0]);\n idx1 = this._polyface.addNormal(normals[1]);\n idx2 = this._polyface.addNormal(normals[2]);\n } else { // compute normals\n const normal = this.getNormalForTriangularFacet(point0, point1, point2);\n idx0 = this._polyface.addNormal(normal);\n idx1 = this._polyface.addNormal(normal);\n idx2 = this._polyface.addNormal(normal);\n }\n this.addIndexedTriangleNormalIndexes(idx0, idx1, idx2);\n }\n // add colors if needed and provided\n if (this._options.needColors) {\n if (colors !== undefined && colors.length > 2) {\n idx0 = this._polyface.addColor(colors[0]);\n idx1 = this._polyface.addColor(colors[1]);\n idx2 = this._polyface.addColor(colors[2]);\n this.addIndexedTriangleColorIndexes(idx0, idx1, idx2);\n }\n }\n // add point and point indexes last (terminates the facet)\n idx0 = this.addPoint(point0);\n idx1 = this.addPoint(point1);\n idx2 = this.addPoint(point2);\n this.addIndexedTrianglePointIndexes(idx0, idx1, idx2);\n }\n /**\n * Add a single triangular facet from existing points to the polyface.\n * * The added triangle may be reversed based on builder setup.\n */\n private addIndexedTrianglePointIndexes(\n indexA: number, indexB: number, indexC: number, terminateFacet: boolean = true,\n ) {\n if (!this._reversed) {\n this._polyface.addPointIndex(indexA);\n this._polyface.addPointIndex(indexB);\n this._polyface.addPointIndex(indexC);\n } else {\n this._polyface.addPointIndex(indexA);\n this._polyface.addPointIndex(indexC);\n this._polyface.addPointIndex(indexB);\n }\n if (terminateFacet)\n this._polyface.terminateFacet();\n }\n /** For a single triangle facet, add the indexes of the corresponding params. */\n private addIndexedTriangleParamIndexes(indexA: number, indexB: number, indexC: number): void {\n if (!this._reversed) {\n this._polyface.addParamIndex(indexA);\n this._polyface.addParamIndex(indexB);\n this._polyface.addParamIndex(indexC);\n } else {\n this._polyface.addParamIndex(indexA);\n this._polyface.addParamIndex(indexC);\n this._polyface.addParamIndex(indexB);\n }\n }\n /** For a single triangle facet, add the indexes of the corresponding params. */\n private addIndexedTriangleNormalIndexes(indexA: number, indexB: number, indexC: number): void {\n if (!this._reversed) {\n this._polyface.addNormalIndex(indexA);\n this._polyface.addNormalIndex(indexB);\n this._polyface.addNormalIndex(indexC);\n } else {\n this._polyface.addNormalIndex(indexA);\n this._polyface.addNormalIndex(indexC);\n this._polyface.addNormalIndex(indexB);\n }\n }\n /** For a single triangle facet, add the indexes of the corresponding colors. */\n private addIndexedTriangleColorIndexes(indexA: number, indexB: number, indexC: number): void {\n if (!this._reversed) {\n this._polyface.addColorIndex(indexA);\n this._polyface.addColorIndex(indexB);\n this._polyface.addColorIndex(indexC);\n } else {\n this._polyface.addColorIndex(indexA);\n this._polyface.addColorIndex(indexC);\n this._polyface.addColorIndex(indexB);\n }\n }\n /** Find or add xyzIndex and normalIndex for coordinates in the sector. */\n private setSectorIndices(sector: FacetSector): void {\n sector.xyzIndex = this.addPoint(sector.xyz);\n if (sector.normal)\n sector.normalIndex = this._polyface.addNormal(sector.normal);\n if (sector.uv)\n sector.uvIndex = this._polyface.addParam(sector.uv);\n }\n private addSectorTriangle(sectorA0: FacetSector, sectorA1: FacetSector, sectorA2: FacetSector): void {\n if (sectorA0.xyz.isAlmostEqual(sectorA1.xyz)\n || sectorA1.xyz.isAlmostEqual(sectorA2.xyz)\n || sectorA2.xyz.isAlmostEqual(sectorA0.xyz)) {\n // trivially degenerate triangle; skip!!!\n } else {\n if (this._options.needNormals)\n this.addIndexedTriangleNormalIndexes(sectorA0.normalIndex, sectorA1.normalIndex, sectorA2.normalIndex);\n if (this._options.needParams)\n this.addIndexedTriangleParamIndexes(sectorA0.uvIndex, sectorA1.uvIndex, sectorA2.uvIndex);\n this.addIndexedTrianglePointIndexes(sectorA0.xyzIndex, sectorA1.xyzIndex, sectorA2.xyzIndex, true);\n }\n }\n private addSectorQuadA01B01(\n sectorA0: FacetSector, sectorA1: FacetSector, sectorB0: FacetSector, sectorB1: FacetSector,\n ): void {\n if (sectorA0.xyz.isAlmostEqual(sectorA1.xyz) && sectorB0.xyz.isAlmostEqual(sectorB1.xyz)) {\n // ignore null quad\n } else if (this._options.shouldTriangulate) {\n this.addSectorTriangle(sectorA0, sectorA1, sectorB1);\n this.addSectorTriangle(sectorB1, sectorB0, sectorA0);\n } else {\n if (this._options.needNormals)\n this.addIndexedQuadNormalIndexes(sectorA0.normalIndex, sectorA1.normalIndex, sectorB0.normalIndex, sectorB1.normalIndex);\n if (this._options.needParams)\n this.addIndexedQuadParamIndexes(sectorA0.uvIndex, sectorA1.uvIndex, sectorB0.uvIndex, sectorB1.uvIndex);\n this.addIndexedQuadPointIndexes(sectorA0.xyzIndex, sectorA1.xyzIndex, sectorB0.xyzIndex, sectorB1.xyzIndex, true);\n }\n }\n /**\n * Add facets between lineStrings with matched point counts.\n * * Surface normals are computed from (a) curve tangents in the linestrings and (b) rule line between linestrings.\n */\n public addBetweenLineStringsWithRuleEdgeNormals(\n lineStringA: LineString3d, vA: number, lineStringB: LineString3d, vB: number, addClosure: boolean = false,\n ): void {\n const pointA = lineStringA.packedPoints;\n const pointB = lineStringB.packedPoints;\n const derivativeA = lineStringA.packedDerivatives;\n const derivativeB = lineStringB.packedDerivatives;\n const fractionA = lineStringA.fractions;\n const fractionB = lineStringB.fractions;\n const needNormals = this._options.needNormals;\n const needParams = this._options.needParams;\n const sectorA0 = new FacetSector(needNormals, needParams, needNormals);\n const sectorA1 = new FacetSector(needNormals, needParams, needNormals);\n const sectorB0 = new FacetSector(needNormals, needParams, needNormals);\n const sectorB1 = new FacetSector(needNormals, needParams, needNormals);\n const sectorA00 = new FacetSector(needNormals, needParams, needNormals);\n const sectorB00 = new FacetSector(needNormals, needParams, needNormals);\n const numPoints = pointA.length;\n if (numPoints < 2 || numPoints !== pointB.length)\n return;\n sectorA0.loadIndexedPointAndDerivativeCoordinatesFromPackedArrays(0, pointA, derivativeA, fractionA, vA);\n sectorB0.loadIndexedPointAndDerivativeCoordinatesFromPackedArrays(0, pointB, derivativeB, fractionB, vB);\n if (needNormals)\n FacetSector.computeNormalsAlongRuleLine(sectorA0, sectorB0);\n this.setSectorIndices(sectorA0);\n this.setSectorIndices(sectorB0);\n sectorA00.copyContentsFrom(sectorA0);\n sectorB00.copyContentsFrom(sectorB0);\n for (let i = 1; i < numPoints; i++) {\n sectorA1.loadIndexedPointAndDerivativeCoordinatesFromPackedArrays(i, pointA, derivativeA, fractionA, vA);\n sectorB1.loadIndexedPointAndDerivativeCoordinatesFromPackedArrays(i, pointB, derivativeA, fractionB, vB);\n FacetSector.computeNormalsAlongRuleLine(sectorA1, sectorB1);\n this.setSectorIndices(sectorA1);\n this.setSectorIndices(sectorB1);\n // create the facet\n this.addSectorQuadA01B01(sectorA0, sectorA1, sectorB0, sectorB1);\n sectorA0.copyContentsFrom(sectorA1);\n sectorB0.copyContentsFrom(sectorB1);\n }\n if (addClosure)\n this.addSectorQuadA01B01(sectorA0, sectorA00, sectorB0, sectorB00);\n }\n /**\n * Add facets between lineStrings with matched point counts.\n * * Indices of points, normals, and uv parameters are pre-stored in the linestrings.\n */\n public addBetweenLineStringsWithStoredIndices(lineStringA: LineString3d, lineStringB: LineString3d): void {\n const pointA = lineStringA.pointIndices!;\n const pointB = lineStringB.pointIndices!;\n let normalA: GrowableFloat64Array | undefined = lineStringA.normalIndices;\n let normalB: GrowableFloat64Array | undefined = lineStringB.normalIndices;\n if (!this._options.needNormals) {\n normalA = undefined;\n normalB = undefined;\n }\n let paramA: GrowableFloat64Array | undefined = lineStringA.paramIndices;\n let paramB: GrowableFloat64Array | undefined = lineStringB.paramIndices;\n if (!this._options.needParams) {\n paramA = undefined;\n paramB = undefined;\n }\n const numPoints = pointA.length;\n for (let i = 1; i < numPoints; i++) {\n if (this.options.shouldTriangulate) {\n if (distinctIndices(pointA.atUncheckedIndex(i - 1), pointA.atUncheckedIndex(i), pointB.atUncheckedIndex(i))) {\n this.addIndexedTrianglePointIndexes(\n pointA.atUncheckedIndex(i - 1), pointA.atUncheckedIndex(i), pointB.atUncheckedIndex(i), false,\n );\n if (normalA && normalB)\n this.addIndexedTriangleNormalIndexes(\n normalA.atUncheckedIndex(i - 1), normalA.atUncheckedIndex(i), normalB.atUncheckedIndex(i - 1),\n );\n if (paramA && paramB)\n this.addIndexedTriangleParamIndexes(\n paramA.atUncheckedIndex(i - 1), paramA.atUncheckedIndex(i), paramB.atUncheckedIndex(i - 1),\n );\n }\n if (distinctIndices(pointB.atUncheckedIndex(i), pointB.atUncheckedIndex(i - 1), pointA.atUncheckedIndex(i - 1))) {\n this.addIndexedTrianglePointIndexes(\n pointA.atUncheckedIndex(i - 1), pointB.atUncheckedIndex(i), pointB.atUncheckedIndex(i - 1), false,\n );\n if (normalA && normalB)\n this.addIndexedTriangleNormalIndexes(\n normalA.atUncheckedIndex(i - 1), normalB.atUncheckedIndex(i), normalB.atUncheckedIndex(i - 1),\n );\n if (paramA && paramB)\n this.addIndexedTriangleParamIndexes(\n paramA.atUncheckedIndex(i - 1), paramB.atUncheckedIndex(i), paramB.atUncheckedIndex(i - 1),\n );\n }\n } else {\n if (pointA.atUncheckedIndex(i - 1) !== pointA.atUncheckedIndex(i) ||\n pointB.atUncheckedIndex(i - 1) !== pointB.atUncheckedIndex(i)) {\n this.addIndexedQuadPointIndexes(\n pointA.atUncheckedIndex(i - 1), pointA.atUncheckedIndex(i),\n pointB.atUncheckedIndex(i - 1), pointB.atUncheckedIndex(i),\n false,\n );\n if (normalA && normalB)\n this.addIndexedQuadNormalIndexes(\n normalA.atUncheckedIndex(i - 1), normalA.atUncheckedIndex(i),\n normalB.atUncheckedIndex(i - 1), normalB.atUncheckedIndex(i),\n );\n if (paramA && paramB)\n this.addIndexedQuadParamIndexes(\n paramA.atUncheckedIndex(i - 1), paramA.atUncheckedIndex(i),\n paramB.atUncheckedIndex(i - 1), paramB.atUncheckedIndex(i),\n );\n }\n }\n this._polyface.terminateFacet();\n }\n }\n /**\n * Add facets between lineStrings with matched point counts.\n * * Facets are announced to addIndexedQuad.\n * * addIndexedQuad is free to apply reversal or triangulation options.\n */\n public addBetweenTransformedLineStrings(\n curves: AnyCurve, transformA: Transform, transformB: Transform, addClosure: boolean = false,\n ): void {\n if (curves instanceof LineString3d) {\n const pointA = curves.points;\n const numPoints = pointA.length;\n let indexA0 = this.findOrAddPointInLineString(curves, 0, transformA)!;\n let indexB0 = this.findOrAddPointInLineString(curves, 0, transformB)!;\n const indexA00 = indexA0;\n const indexB00 = indexB0;\n let indexA1 = 0;\n let indexB1 = 0;\n for (let i = 1; i < numPoints; i++) {\n indexA1 = this.findOrAddPointInLineString(curves, i, transformA)!;\n indexB1 = this.findOrAddPointInLineString(curves, i, transformB)!;\n this.addIndexedQuadPointIndexes(indexA0, indexA1, indexB0, indexB1);\n indexA0 = indexA1;\n indexB0 = indexB1;\n }\n if (addClosure)\n this.addIndexedQuadPointIndexes(indexA0, indexA00, indexB0, indexB00);\n } else {\n const children = curves.children;\n // just send the children individually; final compress will fix things??\n if (children)\n for (const c of children) {\n this.addBetweenTransformedLineStrings(c as AnyCurve, transformA, transformB);\n }\n }\n }\n private addBetweenStrokeSetPair(dataA: AnyCurve, vA: number, dataB: AnyCurve, vB: number) {\n if (dataA instanceof LineString3d && dataB instanceof LineString3d) {\n this.addBetweenLineStringsWithRuleEdgeNormals(dataA, vA, dataB, vB, false);\n } else if (dataA instanceof ParityRegion && dataB instanceof ParityRegion) {\n if (dataA.children.length === dataB.children.length) {\n for (let i = 0; i < dataA.children.length; i++) {\n this.addBetweenStrokeSetPair(dataA.children[i], vA, dataB.children[i], vB);\n }\n }\n } else if (dataA instanceof CurveChain && dataB instanceof CurveChain) {\n const chainA = dataA.children;\n const chainB = dataB.children;\n if (chainA.length === chainB.length) {\n for (let i = 0; i < chainA.length; i++) {\n const cpA = chainA[i];\n const cpB = chainB[i];\n if (cpA instanceof LineString3d && cpB instanceof LineString3d) {\n this.addBetweenLineStringsWithRuleEdgeNormals(cpA, vA, cpB, vB);\n }\n }\n }\n }\n }\n /** Add facets from a Cone. */\n public addCone(cone: Cone): void {\n // ensure identical stroke counts at each end\n let strokeCount = 16;\n if (this._options)\n strokeCount = this._options.applyTolerancesToArc(cone.getMaxRadius());\n let axisStrokeCount = 1;\n const lineStringA = cone.strokeConstantVSection(0.0, strokeCount, this._options);\n const lineStringB = cone.strokeConstantVSection(1.0, strokeCount, this._options);\n if (this._options) {\n const vDistanceRange = GrowableXYZArray.distanceRangeBetweenCorrespondingPoints(\n lineStringA.packedPoints, lineStringB.packedPoints,\n );\n axisStrokeCount = this._options.applyMaxEdgeLength(1, vDistanceRange.low);\n }\n const sizes = cone.maxIsoParametricDistance();\n this.addUVGridBody(cone, strokeCount, axisStrokeCount, Segment1d.create(0, sizes.x), Segment1d.create(0, sizes.y));\n this.endFace();\n if (cone.capped) {\n if (!Geometry.isSmallMetricDistance(cone.getRadiusA())) {\n this.addTrianglesInUncheckedConvexPolygon(lineStringA, true); // lower triangles flip\n this.endFace();\n }\n if (!Geometry.isSmallMetricDistance(cone.getRadiusB())) {\n this.addTrianglesInUncheckedConvexPolygon(lineStringB, false); // upper triangles to not flip.\n this.endFace();\n }\n }\n }\n /** Add facets for a TorusPipe. */\n public addTorusPipe(surface: TorusPipe, phiStrokeCount?: number, thetaStrokeCount?: number): void {\n const thetaFraction = surface.getThetaFraction();\n let numU = Geometry.clamp(Geometry.resolveNumber(phiStrokeCount, 8), 4, 64);\n let numV = Geometry.clamp(\n Geometry.resolveNumber(thetaStrokeCount, Math.ceil(16 * thetaFraction)), 2, 64);\n if (this._options) {\n numU = this._options.applyTolerancesToArc(surface.getMinorRadius());\n numV = this._options.applyTolerancesToArc(surface.getMajorRadius(), surface.getSweepAngle().radians);\n }\n this.toggleReversedFacetFlag();\n const sizes = surface.maxIsoParametricDistance();\n this.addUVGridBody(surface, numU, numV, Segment1d.create(0, sizes.x), Segment1d.create(0, sizes.y));\n this.toggleReversedFacetFlag();\n if (surface.capped && thetaFraction < 1.0) {\n const centerFrame = surface.getConstructiveFrame()!;\n const minorRadius = surface.getMinorRadius();\n const majorRadius = surface.getMajorRadius();\n const a = 2 * minorRadius;\n const r0 = majorRadius - minorRadius;\n const r1 = majorRadius + minorRadius;\n const z0 = -minorRadius;\n const cap0ToLocal = Transform.createRowValues(\n a, 0, 0, r0,\n 0, 0, -1, 0,\n 0, a, 0, z0,\n );\n const cap0ToWorld = centerFrame.multiplyTransformTransform(cap0ToLocal);\n const worldToCap0 = cap0ToWorld.inverse();\n if (worldToCap0) {\n const ls0 = UVSurfaceOps.createLinestringOnUVLine(surface, 0, 0, 1, 0, numU, false, true);\n ls0.computeUVFromXYZTransform(worldToCap0);\n this.addTrianglesInUncheckedConvexPolygon(ls0, false);\n }\n const thetaRadians = surface.getSweepAngle().radians;\n const cc = Math.cos(thetaRadians);\n const ss = Math.sin(thetaRadians);\n const cap1ToLocal = Transform.createRowValues(\n -cc * a, 0, -ss, r1 * cc,\n -ss * a, 0, cc, r1 * ss,\n 0, a, 0, z0,\n );\n const cap1ToWorld = centerFrame.multiplyTransformTransform(cap1ToLocal);\n const worldToCap1 = cap1ToWorld.inverse();\n if (worldToCap1) {\n const ls1 = UVSurfaceOps.createLinestringOnUVLine(surface, 1, 1, 0, 1, numU, false, true);\n ls1.computeUVFromXYZTransform(worldToCap1);\n this.addTrianglesInUncheckedConvexPolygon(ls1, false);\n }\n }\n }\n /**\n * Add point data (no params, normals) for linestrings.\n * * This recurses through curve chains (loops and paths).\n * * LineStrings are swept.\n * * All other curve types are ignored.\n * @param contour contour which contains only linestrings.\n * @param vector sweep vector.\n */\n public addLinearSweepLineStringsXYZOnly(contour: AnyCurve, vector: Vector3d): void {\n if (contour instanceof LineString3d) {\n let pointA = Point3d.create();\n let pointB = Point3d.create();\n let indexA0 = 0;\n let indexA1 = 0;\n let indexB0 = 0;\n let indexB1 = 0;\n const n = contour.numPoints();\n for (let i = 0; i < n; i++) {\n pointA = contour.pointAt(i, pointA)!;\n pointB = pointA.plus(vector, pointB);\n indexA1 = this.addPoint(pointA);\n indexB1 = this.addPoint(pointB);\n if (i > 0)\n this.addIndexedQuadPointIndexes(indexA0, indexA1, indexB0, indexB1);\n indexA0 = indexA1;\n indexB0 = indexB1;\n }\n } else if (contour instanceof CurveChain) {\n for (const ls of contour.children)\n this.addLinearSweepLineStringsXYZOnly(ls, vector);\n }\n }\n /** Construct facets for a rotational sweep. */\n public addRotationalSweep(surface: RotationalSweep): void {\n const contour = surface.getSweepContourRef();\n const section0 = StrokeCountSection.create(contour.getCurves(), this._options);\n const baseStrokes = section0.getStrokes();\n // ensure sweep is positive for buildRotationalNormalsInLineStrings\n const axis = surface.cloneAxisRay();\n const sweepAngle = surface.getSweep();\n if (sweepAngle.radians < 0.0) {\n axis.direction.scaleInPlace(-1);\n sweepAngle.setRadians(-sweepAngle.radians);\n }\n // swingVector points in the direction of positive sweep\n const perpendicularVector = CylindricalRangeQuery.computeMaxVectorFromRay(axis, baseStrokes);\n const swingVector = axis.direction.crossProduct(perpendicularVector);\n // ensure contour computed normal is aligned with swingVector for buildRotationalNormalsInLineStrings\n const contourNormalAgreesWithSwingDir = contour.localToWorld.matrix.dotColumnZ(swingVector) > 0;\n if (!contourNormalAgreesWithSwingDir)\n baseStrokes.reverseInPlace();\n if (this._options.needNormals)\n CylindricalRangeQuery.buildRotationalNormalsInLineStrings(baseStrokes, axis, swingVector);\n const maxDistance = perpendicularVector.magnitude();\n const maxPath = Math.abs(maxDistance * sweepAngle.radians);\n let numStep = StrokeOptions.applyAngleTol(this._options, 1, sweepAngle.radians, undefined);\n numStep = StrokeOptions.applyMaxEdgeLength(this._options, numStep, maxPath);\n for (let i = 1; i <= numStep; i++) {\n const transformA = surface.getFractionalRotationTransform((i - 1) / numStep);\n const transformB = surface.getFractionalRotationTransform(i / numStep);\n this.addBetweenRotatedStrokeSets(baseStrokes, transformA, i - 1, transformB, i);\n }\n if (surface.capped) {\n contour.purgeFacets();\n const reverseNearCap = contourNormalAgreesWithSwingDir;\n contour.emitFacets(this, reverseNearCap, undefined);\n contour.emitFacets(this, !reverseNearCap, surface.getFractionalRotationTransform(1.0));\n }\n }\n /** Construct facets for any planar region. */\n public addTriangulatedRegion(region: AnyRegion): void {\n const contour = SweepContour.createForLinearSweep(region);\n if (contour)\n contour.emitFacets(this, this.reversedFlag, undefined);\n }\n /**\n * Apply stroke counts to curve primitives.\n * * Recursively visit all children of data.\n * * At each primitive, invoke `computeStrokeCountForOptions` method with options from the builder.\n * @deprecated in 4.8.0 - will not be removed until after 2026-06-13. This method does nothing and is unneeded.\n */\n public applyStrokeCountsToCurvePrimitives(data: AnyCurve | GeometryQuery): void {\n const options = this._options;\n if (data instanceof CurvePrimitive) {\n data.computeStrokeCountForOptions(options);\n } else if (data instanceof CurveCollection) {\n const children = data.children;\n if (children)\n for (const child of children)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.applyStrokeCountsToCurvePrimitives(child);\n }\n }\n private addBetweenStrokeSetsWithRuledNormals(stroke0: AnyCurve, stroke1: AnyCurve, numVEdge: number): void {\n const strokeSets = [stroke0];\n const fractions = [0.0];\n for (let vIndex = 1; vIndex < numVEdge; vIndex++) {\n const vFraction = vIndex / numVEdge;\n const strokeA = ConstructCurveBetweenCurves.interpolateBetween(stroke0, vIndex / numVEdge, stroke1) as AnyCurve;\n strokeSets.push(strokeA);\n fractions.push(vFraction);\n }\n strokeSets.push(stroke1);\n fractions.push(1.0);\n for (let vIndex = 0; vIndex < numVEdge; vIndex++) {\n this.addBetweenStrokeSetPair(strokeSets[vIndex], fractions[vIndex], strokeSets[vIndex + 1], fractions[vIndex + 1]);\n }\n }\n private createIndicesInLineString(ls: LineString3d, vParam: number, transform?: Transform) {\n const n = ls.numPoints();\n const pointIndices = ls.ensureEmptyPointIndices();\n const index0 = this.findOrAddPointInLineString(ls, 0, transform);\n pointIndices.push(index0!);\n if (n > 1) {\n let indexA = index0;\n let indexB: number | undefined;\n for (let i = 1; i + 1 < n; i++) {\n indexB = this.findOrAddPointInLineString(ls, i, transform, indexA);\n pointIndices.push(indexB!);\n indexA = indexB;\n }\n // assume last point can only repeat back to zero\n indexB = this.findOrAddPointInLineString(ls, n - 1, transform, index0);\n pointIndices.push(indexB!);\n }\n if (this._options.needNormals && ls.packedSurfaceNormals !== undefined) {\n const normalIndices = ls.ensureEmptyNormalIndices();\n const normalIndex0 = this.findOrAddNormalInLineString(ls, 0, transform);\n normalIndices.push(normalIndex0!);\n if (n > 1) {\n let normalIndexA = normalIndex0;\n let normalIndexB: number | undefined;\n for (let i = 1; i + 1 < n; i++) {\n normalIndexB = this.findOrAddNormalInLineString(ls, i, transform, normalIndexA);\n normalIndices.push(normalIndexB!);\n normalIndexA = normalIndexB;\n }\n // assume last point can only repeat back to zero\n normalIndexB = this.findOrAddNormalInLineString(ls, n - 1, transform, normalIndex0, normalIndexA);\n normalIndices.push(normalIndexB!);\n }\n }\n if (this._options.needParams && ls.packedUVParams !== undefined) {\n const uvIndices = ls.ensureEmptyUVIndices();\n const uvIndex0 = this.findOrAddParamInLineString(ls, 0, vParam);\n uvIndices.push(uvIndex0!);\n if (n > 1) {\n let uvIndexA = uvIndex0;\n let uvIndexB: number | undefined;\n for (let i = 1; i + 1 < n; i++) {\n uvIndexB = this.findOrAddParamInLineString(ls, i, vParam, uvIndexA);\n uvIndices.push(uvIndexB!);\n uvIndexA = uvIndexB;\n }\n // assume last point can only repeat back to zero\n uvIndexB = this.findOrAddParamInLineString(ls, n - 1, vParam, uvIndexA, uvIndex0);\n uvIndices.push(uvIndexB!);\n }\n }\n }\n private addBetweenRotatedStrokeSets(\n stroke0: AnyCurve, transformA: Transform, vA: number, transformB: Transform, vB: number,\n ): void {\n if (stroke0 instanceof LineString3d) {\n const strokeA = stroke0.cloneTransformed(transformA);\n this.createIndicesInLineString(strokeA, vA);\n const strokeB = stroke0.cloneTransformed(transformB);\n this.createIndicesInLineString(strokeB, vB);\n this.addBetweenLineStringsWithStoredIndices(strokeA, strokeB);\n } else if (stroke0 instanceof ParityRegion) {\n for (const child of stroke0.children) {\n this.addBetweenRotatedStrokeSets(child, transformA, vA, transformB, vB);\n }\n } else if (stroke0 instanceof CurveChain) {\n for (const child of stroke0.children) {\n if (child instanceof LineString3d) {\n this.addBetweenRotatedStrokeSets(child, transformA, vA, transformB, vB);\n }\n }\n }\n }\n /** Add facets from the linear sweep. */\n public addLinearSweep(surface: LinearSweep): void {\n const contour = surface.getCurvesRef();\n const section0 = StrokeCountSection.create(contour, this._options);\n const stroke0 = section0.getStrokes();\n const sweepVector = surface.cloneSweepVector();\n const sweepTransform = Transform.createTranslation(sweepVector);\n const stroke1 = stroke0.cloneTransformed(sweepTransform) as AnyCurve;\n const numVEdge = this._options.applyMaxEdgeLength(1, sweepVector.magnitude());\n this.addBetweenStrokeSetsWithRuledNormals(stroke0, stroke1, numVEdge);\n if (surface.capped && contour.isAnyRegionType) {\n const contourA = surface.getSweepContourRef();\n contourA.purgeFacets();\n const reverseNearCap = contourA.localToWorld.matrix.dotColumnZ(sweepVector) > 0;\n contourA.emitFacets(this, reverseNearCap, undefined);\n contourA.emitFacets(this, !reverseNearCap, sweepTransform);\n }\n }\n /** Add facets from a ruled sweep. */\n public addRuledSweep(surface: RuledSweep): boolean {\n const contours = surface.sweepContoursRef();\n let stroke0: AnyCurve | undefined;\n let stroke1: AnyCurve;\n const sectionMaps = [];\n for (const contour of contours)\n sectionMaps.push(StrokeCountSection.create(contour.curves, this._options));\n if (StrokeCountSection.enforceStrokeCountCompatibility(sectionMaps)) {\n StrokeCountSection.enforceCompatibleDistanceSums(sectionMaps);\n for (let i = 0; i < contours.length; i++) {\n stroke1 = sectionMaps[i].getStrokes();\n if (!stroke1)\n stroke1 = contours[i].curves.cloneStroked();\n if (i > 0 && stroke0 && stroke1) {\n const distanceRange = Range1d.createNull();\n if (StrokeCountSection.extendDistanceRangeBetweenStrokes(stroke0, stroke1, distanceRange)\n && !distanceRange.isNull) {\n const numVEdge = this._options.applyMaxEdgeLength(1, distanceRange.high);\n this.addBetweenStrokeSetsWithRuledNormals(stroke0, stroke1, numVEdge);\n }\n }\n stroke0 = stroke1;\n }\n }\n if (surface.capped && contours[0].curves.isAnyRegionType) {\n contours[0].purgeFacets();\n contours[0].emitFacets(this, true, undefined);\n contours[contours.length - 1].purgeFacets();\n contours[contours.length - 1].emitFacets(this, false, undefined);\n }\n return true;\n }\n /** Add facets from a sphere. */\n public addSphere(sphere: Sphere, strokeCount?: number): void {\n let numStrokeTheta = strokeCount ? strokeCount : this.options.applyTolerancesToArc(sphere.maxAxisRadius());\n if (Geometry.isOdd(numStrokeTheta))\n numStrokeTheta += 1;\n const numStrokePhi = Geometry.clampToStartEnd(\n Math.abs(numStrokeTheta * sphere.latitudeSweepFraction), 1, Math.ceil(numStrokeTheta * 0.5),\n );\n const lineStringA = sphere.strokeConstantVSection(0.0, numStrokeTheta, this._options);\n if (sphere.capped && !Geometry.isSmallMetricDistance(lineStringA.quickLength())) {\n this.addTrianglesInUncheckedConvexPolygon(lineStringA, true); // lower triangles flip\n this.endFace();\n }\n const sizes = sphere.maxIsoParametricDistance();\n this.addUVGridBody(sphere, numStrokeTheta, numStrokePhi, Segment1d.create(0, sizes.x), Segment1d.create(0, sizes.y));\n this.endFace();\n const lineStringB = sphere.strokeConstantVSection(1.0, numStrokeTheta, this._options);\n if (sphere.capped && !Geometry.isSmallMetricDistance(lineStringB.quickLength())) {\n this.addTrianglesInUncheckedConvexPolygon(lineStringB, false); // upper triangles do not flip\n this.endFace();\n }\n }\n /** Add facets from a box. */\n public addBox(box: Box): void {\n const corners = box.getCorners();\n const xLength = Geometry.maxXY(box.getBaseX(), box.getBaseX());\n const yLength = Geometry.maxXY(box.getBaseY(), box.getTopY());\n let zLength = 0.0;\n for (let i = 0; i < 4; i++)\n zLength = Geometry.maxXY(zLength, corners[i].distance(corners[i + 4]));\n const numX = this._options.applyMaxEdgeLength(1, xLength);\n const numY = this._options.applyMaxEdgeLength(1, yLength);\n const numZ = this._options.applyMaxEdgeLength(1, zLength);\n // wrap the 4 out-of-plane faces as a single parameter space with \"distance\"\n // advancing in x, then y, then negative x, then negative y\n const uParamRange = Segment1d.create(0, xLength);\n const vParamRange = Segment1d.create(0, zLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[0], corners[1], corners[4], corners[5]), numX, numZ, uParamRange, vParamRange,\n );\n uParamRange.shift(xLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[1], corners[3], corners[5], corners[7]), numY, numZ, uParamRange, vParamRange,\n );\n uParamRange.shift(yLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[3], corners[2], corners[7], corners[6]), numX, numZ, uParamRange, vParamRange,\n );\n uParamRange.shift(xLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[2], corners[0], corners[6], corners[4]), numY, numZ, uParamRange, vParamRange,\n );\n // finally end that wraparound face\n this.endFace();\n if (box.capped) {\n uParamRange.set(0.0, xLength);\n vParamRange.set(0.0, yLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[4], corners[5], corners[6], corners[7]), numX, numY, uParamRange, vParamRange,\n );\n this.endFace();\n uParamRange.set(0.0, xLength);\n vParamRange.set(0.0, yLength);\n this.addUVGridBody(\n BilinearPatch.create(corners[2], corners[3], corners[0], corners[1]), numX, numY, uParamRange, vParamRange,\n );\n this.endFace();\n }\n }\n /**\n * Add a polygon to the evolving facets.\n * * Add points to the polyface.\n * * Indices are added (in reverse order if indicated by the builder state).\n * @param points array of points. This may contain extra points not to be used in the polygon.\n * @param numPointsToUse number of points to use.\n */\n public addPolygon(points: Point3d[], numPointsToUse?: number): void {\n // don't use trailing points that match start point\n if (numPointsToUse === undefined)\n numPointsToUse = points.length;\n while (numPointsToUse > 1 && points[numPointsToUse - 1].isAlmostEqual(points[0]))\n numPointsToUse--;\n let index = 0;\n if (!this._reversed) {\n for (let i = 0; i < numPointsToUse; i++) {\n index = this.addPoint(points[i]);\n this._polyface.addPointIndex(index);\n }\n } else {\n for (let i = numPointsToUse; --i >= 0;) {\n index = this.addPoint(points[i]);\n this._polyface.addPointIndex(index);\n }\n }\n this._polyface.terminateFacet();\n }\n /**\n * Add a polygon to the evolving facets.\n * * Add points to the polyface\n * * Indices are added (in reverse order if indicated by the builder state).\n * * Arrays with 2 or fewer points are ignored.\n * @param points array of points. Trailing closure points are ignored.\n */\n public addPolygonGrowableXYZArray(points: GrowableXYZArray): void {\n // don't use trailing points that match start point\n let numPointsToUse = points.length;\n while (numPointsToUse > 2 && Geometry.isSmallMetricDistance(points.distanceIndexIndex(0, numPointsToUse - 1)!))\n numPointsToUse--;\n // strip trailing duplicates\n while (numPointsToUse > 2 && Geometry.isSmallMetricDistance(points.distanceIndexIndex(numPointsToUse - 2, numPointsToUse - 1)!))\n numPointsToUse--;\n // ignore triangles for which the height is less than smallMetricDistance times length.\n // sum of edge lengths is twice the perimeter. If it is flat that's twice the largest base dimension.\n // cross product magnitude is twice the area.\n if (numPointsToUse === 3) {\n const cross = points.crossProductIndexIndexIndex(0, 1, 2)!;\n const q = cross.magnitude();\n const p = points.distanceIndexIndex(0, 1)! + points.distanceIndexIndex(0, 2)! + points.distanceIndexIndex(1, 2)!;\n if (q < Geometry.smallMetricDistance * p)\n numPointsToUse = 0;\n }\n if (numPointsToUse > 2) {\n let index = 0;\n if (!this._reversed) {\n for (let i = 0; i < numPointsToUse; i++) {\n index = this.findOrAddPointInGrowableXYZArray(points, i)!;\n this._polyface.addPointIndex(index);\n }\n } else {\n for (let i = numPointsToUse; --i >= 0;) {\n index = this.findOrAddPointInGrowableXYZArray(points, i)!;\n this._polyface.addPointIndex(index);\n }\n }\n this._polyface.terminateFacet();\n }\n }\n /**\n * Add a polygon to the evolving facets.\n * * Add points to the polyface.\n * * Compute each point index as the point is added.\n * * All data arrays are parallel to the point array.\n * * Point indices are added in reverse order if indicated by the builder state.\n * @param points array of vertices in order around the facet.\n * @param normals (optional) array of normals, one per vertex.\n * @param params (optional) array of uv-parameters, one per vertex.\n * @param colors (optional) array of colors, one per vertex.\n * @param edgeVisible (optional) array of flags, one per vertex, true iff edge starting at corresponding vertex is visible.\n */\n public addFacetFromGrowableArrays(\n points: GrowableXYZArray,\n normals: GrowableXYZArray | undefined,\n params: GrowableXYArray | undefined,\n colors: number[] | undefined,\n edgeVisible?: boolean[],\n ): void {\n // don't use trailing points that match start point\n let numPointsToUse = points.length;\n while (numPointsToUse > 1 && Geometry.isSmallMetricDistance(points.distanceIndexIndex(0, numPointsToUse - 1)!))\n numPointsToUse--;\n let index = 0;\n if (normals && normals.length < numPointsToUse)\n normals = undefined;\n if (params && params.length < numPointsToUse)\n params = undefined;\n if (colors && colors.length < numPointsToUse)\n colors = undefined;\n if (edgeVisible && edgeVisible.length < numPointsToUse)\n edgeVisible = undefined;\n if (!this._reversed) {\n for (let i = 0; i < numPointsToUse; i++) {\n index = this.findOrAddPointInGrowableXYZArray(points, i)!;\n this._polyface.addPointIndex(index, edgeVisible ? edgeVisible[i] : true);\n if (normals) {\n index = this.findOrAddNormalInGrowableXYZArray(normals, i)!;\n this._polyface.addNormalIndex(index);\n }\n if (params) {\n index = this.addParamInGrowableXYArray(params, i)!;\n this._polyface.addParamIndex(index);\n }\n if (colors) {\n index = this._polyface.addColor(colors[i]);\n this._polyface.addColorIndex(index);\n }\n }\n } else {\n for (let i = numPointsToUse; --i >= 0;) {\n index = this.findOrAddPointInGrowableXYZArray(points, i)!;\n this._polyface.addPointIndex(index);\n if (normals) {\n index = this.findOrAddNormalInGrowableXYZArray(normals, i)!;\n this._polyface.addNormalIndex(index);\n }\n if (params) {\n index = this.addParamInGrowableXYArray(params, i)!;\n this._polyface.addParamIndex(index);\n }\n if (colors) {\n index = this._polyface.addColor(colors[i]);\n this._polyface.addColorIndex(index);\n }\n }\n }\n this._polyface.terminateFacet();\n }\n /**\n * Add the current visitor facet to the evolving polyface.\n * * Indices are added (in reverse order if indicated by the builder state).\n */\n public addFacetFromVisitor(visitor: PolyfaceVisitor): void {\n this.addFacetFromGrowableArrays(visitor.point, visitor.normal, visitor.param, visitor.color, visitor.edgeVisible);\n }\n /** Add all visitor facets to the evolving polyface (in reverse order if indicated by the builder state). */\n public addFacetsFromVisitor(visitor: PolyfaceVisitor): void {\n visitor.reset();\n for (; visitor.moveToNextFacet();)\n this.addFacetFromVisitor(visitor);\n }\n /**\n * Add the subset of visitor data indexed by the indices.\n * * Ideally, the subset represents a sub-facet of the visited facet.\n * @param visitor data for the currently visited facet.\n * @param indices local indices into the visitor data arrays.\n * @returns whether the data was added successfully. Encountering an invalid index returns false.\n */\n public addFacetFromIndexedVisitor(visitor: PolyfaceVisitor, indices: number[]): boolean {\n if (indices.length > visitor.pointIndex.length)\n return false;\n const xyz = new GrowableXYZArray(indices.length);\n const normal = visitor.normal ? new GrowableXYZArray(indices.length) : undefined;\n const param = visitor.param ? new GrowableXYArray(indices.length) : undefined;\n const color = visitor.color ? new Array<number>(indices.length) : undefined;\n const visible = visitor.edgeVisible ? new Array<boolean>(indices.length) : undefined;\n for (let i = 0; i < indices.length; ++i) {\n const index = indices[i];\n if (index < 0 || index >= visitor.point.length) // all visitor arrays have the same length\n return false;\n xyz.pushXYZ(\n visitor.point.getXAtUncheckedPointIndex(index),\n visitor.point.getYAtUncheckedPointIndex(index),\n visitor.point.getZAtUncheckedPointIndex(index),\n );\n if (visitor.normal && normal)\n normal.pushXYZ(\n visitor.normal.getXAtUncheckedPointIndex(index),\n visitor.normal.getYAtUncheckedPointIndex(index),\n visitor.normal.getZAtUncheckedPointIndex(index),\n );\n if (visitor.param && param)\n param.pushXY(\n visitor.param.getXAtUncheckedPointIndex(index),\n visitor.param.getYAtUncheckedPointIndex(index),\n );\n if (visitor.color && color)\n color[i] = visitor.color[index];\n if (visitor.edgeVisible && visible)\n visible[i] = visitor.edgeVisible[index];\n }\n this.addFacetFromGrowableArrays(xyz, normal, param, color, visible);\n return true;\n }\n /** Add a polyface with optional reverse and transform. */\n public addIndexedPolyface(source: IndexedPolyface, reversed: boolean = false, transform?: Transform): void {\n this._polyface.addIndexedPolyface(source, reversed, transform);\n }\n /**\n * Produce a new FacetFaceData for all terminated facets since construction of the previous face.\n * * Each facet number/index is mapped to the FacetFaceData through the faceToFaceData array.\n * @returns true if successful, and false otherwise.\n */\n public endFace(): boolean {\n return this._polyface.setNewFaceData();\n }\n /** Double dispatch handler for Cone. */\n public override handleCone(g: Cone): any {\n return this.addCone(g);\n }\n /** Double dispatch handler for TorusPipe. */\n public override handleTorusPipe(g: TorusPipe): any {\n return this.addTorusPipe(g);\n }\n /** Double dispatch handler for Sphere. */\n public override handleSphere(g: Sphere): any {\n return this.addSphere(g);\n }\n /** Double dispatch handler for Box. */\n public override handleBox(g: Box): any {\n return this.addBox(g);\n }\n /** Double dispatch handler for LinearSweep. */\n public override handleLinearSweep(g: LinearSweep): any {\n return this.addLinearSweep(g);\n }\n /** Double dispatch handler for RotationalSweep. */\n public override handleRotationalSweep(g: RotationalSweep): any {\n return this.addRotationalSweep(g);\n }\n /** Double dispatch handler for RuledSweep. */\n public override handleRuledSweep(g: RuledSweep): any {\n return this.addRuledSweep(g);\n }\n /** Double dispatch handler for Loop. */\n public override handleLoop(g: Loop): any {\n return this.addTriangulatedRegion(g);\n }\n /** Double dispatch handler for ParityRegion. */\n public override handleParityRegion(g: ParityRegion): any {\n return this.addTriangulatedRegion(g);\n }\n /** Double dispatch handler for UnionRegion. */\n public override handleUnionRegion(g: UnionRegion): any {\n return this.addTriangulatedRegion(g);\n }\n /** Add facets for a GeometryQuery object. This is double dispatch through `dispatchToGeometryHandler(this)` */\n public addGeometryQuery(g: GeometryQuery): void {\n g.dispatchToGeometryHandler(this);\n }\n /**\n * Add a graph to the builder.\n * * Visit one node per face.\n * * If `acceptFaceFunction(node)` returns true, pass face coordinates to the builder.\n * * Accepted face edge visibility is determined by `isEdgeVisibleFunction`.\n * * Rely on the builder's compress step to find common vertex coordinates.\n * @param graph faces to add as facets.\n * @param acceptFaceFunction optional test for whether to add a given face. Default: ignore exterior faces.\n * @param isEdgeVisibleFunction optional test for whether to hide an edge. Default: hide interior edges.\n * @internal\n */\n public addGraph(\n graph: HalfEdgeGraph,\n acceptFaceFunction: HalfEdgeToBooleanFunction = (node) => HalfEdge.testNodeMaskNotExterior(node),\n isEdgeVisibleFunction: HalfEdgeToBooleanFunction = (node) => HalfEdge.testMateMaskExterior(node),\n ): void {\n let index = 0;\n const needNormals = this._options.needNormals;\n const needParams = this._options.needParams;\n let normalIndex = 0;\n if (needNormals)\n normalIndex = this._polyface.addNormalXYZ(0, 0, 1); // big assumption!!!! Is each node.z really the same?\n graph.announceFaceLoops(\n (_graph: HalfEdgeGraph, seed: HalfEdge) => {\n if (acceptFaceFunction(seed) && seed.countEdgesAroundFace() > 2) {\n let node = seed;\n do {\n index = this.addPointXYZ(node.x, node.y, node.z);\n this._polyface.addPointIndex(index, isEdgeVisibleFunction === undefined ? true : isEdgeVisibleFunction(node));\n if (needParams) {\n index = this.addParamXY(node.x, node.y); // big assumption!!!!\n this._polyface.addParamIndex(index);\n }\n if (needNormals) {\n this._polyface.addNormalIndex(normalIndex);\n }\n node = node.faceSuccessor;\n } while (node !== seed);\n this._polyface.terminateFacet();\n }\n return true;\n });\n }\n /**\n * Add a graph's faces to the builder.\n * * For each node in `faces`:\n * * Add all of its vertices to the polyface.\n * * Add point indices to form a new facet.\n * * (note: no normal or param indices are added)\n * * Terminate the facet.\n * @internal\n */\n public addGraphFaces(faces: HalfEdge[]): void {\n let index = 0;\n for (const seed of faces) {\n let node = seed;\n do {\n index = this.addPointXYZ(node.x, node.y, node.z);\n this._polyface.addPointIndex(index);\n node = node.faceSuccessor;\n } while (node !== seed);\n this._polyface.terminateFacet();\n }\n }\n /**\n * Create a polyface containing the faces of a HalfEdgeGraph, with test functions to filter faces and hide edges.\n * * This is a static wrapper of [[addGraph]].\n * @param graph faces to add as facets.\n * @param options (optional) options for the polyface.\n * @param acceptFaceFunction optional test for whether to add a given face. Default: ignore exterior faces.\n * @param isEdgeVisibleFunction optional test for whether to hide an edge. Default: hide interior edges.\n * @internal\n */\n public static graphToPolyface(\n graph: HalfEdgeGraph,\n options?: StrokeOptions,\n acceptFaceFunction: HalfEdgeToBooleanFunction = (node) => HalfEdge.testNodeMaskNotExterior(node),\n isEdgeVisibleFunction: HalfEdgeToBooleanFunction = (node) => HalfEdge.testMateMaskExterior(node),\n ): IndexedPolyface {\n const builder = PolyfaceBuilder.create(options);\n builder.addGraph(graph, acceptFaceFunction, isEdgeVisibleFunction);\n builder.endFace();\n return builder.claimPolyface();\n }\n /**\n * Create a polyface containing the faces of a HalfEdgeGraph that are specified by the HalfEdge array.\n * @internal\n */\n public static graphFacesToPolyface(faces: HalfEdge[]): IndexedPolyface {\n const builder = PolyfaceBuilder.create();\n builder.addGraphFaces(faces);\n builder.endFace();\n return builder.claimPolyface();\n }\n /**\n * Create a polyface containing triangles in a (space) polygon.\n * * The polyface contains only coordinate data (no params or normals).\n */\n public static polygonToTriangulatedPolyface(points: Point3d[], localToWorld?: Transform): IndexedPolyface | undefined {\n if (!localToWorld)\n localToWorld = FrameBuilder.createFrameWithCCWPolygon(points);\n if (localToWorld) {\n const localPoints = localToWorld.multiplyInversePoint3dArray(points)!;\n const areaXY = PolygonOps.areaXY(localPoints);\n if (areaXY < 0.0)\n localPoints.reverse();\n const graph = Triangulator.createTriangulatedGraphFromSingleLoop(localPoints);\n if (graph) {\n const polyface = this.graphToPolyface(graph);\n polyface.tryTransformInPlace(localToWorld);\n return polyface;\n }\n }\n return undefined;\n }\n /**\n * Add facets to the builder given arrays of coordinates for multiple facets.\n * * pointArray[i] is an array of 3 or 4 points.\n * * paramArray[i] is an array of matching number of params.\n * * normalArray[i] is an array of matching number of normals.\n * @param pointArray array of arrays of point coordinates.\n * @param paramArray (optional) array of arrays of uv parameters.\n * @param normalArray (optional) array of arrays of normals.\n * @param endFace if true, call this.endFace after adding all the facets.\n */\n public addCoordinateFacets(\n pointArray: Point3d[][], paramArray?: Point2d[][], normalArray?: Vector3d[][], endFace: boolean = false,\n ): void {\n for (let i = 0; i < pointArray.length; i++) {\n const params = paramArray ? paramArray[i] : undefined;\n const normals = normalArray ? normalArray[i] : undefined;\n if (pointArray[i].length === 3)\n this.addTriangleFacet(pointArray[i], params, normals);\n else if (pointArray[i].length === 4)\n this.addQuadFacet(pointArray[i], params, normals);\n }\n if (endFace)\n this.endFace();\n }\n /**\n * Add facets from the parametric surface.\n * * Evaluate `(numU + 1) * (numV + 1)` grid points (in 0..1 in both u and v) on a surface.\n * * Add the facets for `numU * numV` quads.\n * * uv params are the 0..1 fractions.\n * * Normals are cross products of u and v direction partial derivatives.\n * @param surface UV surface to evaluate.\n * @param numU number of intervals (edges) in the u direction (number of points is `numU + 1`).\n * @param numV number of intervals (edges) in the v direction (number of points is `numV + 1`).\n * @param uMap optional mapping from u fraction to parameter space (such as texture).\n * @param vMap optional mapping from v fraction to parameter space (such as texture).\n */\n public addUVGridBody(surface: UVSurface, numU: number, numV: number, uMap?: Segment1d, vMap?: Segment1d): void {\n let xyzIndex0 = new GrowableFloat64Array(numU);\n let xyzIndex1 = new GrowableFloat64Array(numU);\n let paramIndex0: GrowableFloat64Array | undefined;\n let paramIndex1: GrowableFloat64Array | undefined;\n let normalIndex0: GrowableFloat64Array | undefined;\n let normalIndex1: GrowableFloat64Array | undefined;\n const reverse = this._reversed;\n const needNormals = this.options.needNormals;\n if (needNormals) {\n normalIndex0 = new GrowableFloat64Array(numU);\n normalIndex1 = new GrowableFloat64Array(numU);\n }\n const needParams = this.options.needParams;\n if (needParams) {\n paramIndex0 = new GrowableFloat64Array(numU);\n paramIndex1 = new GrowableFloat64Array(numU);\n }\n let indexSwap;\n xyzIndex0.ensureCapacity(numU);\n xyzIndex1.ensureCapacity(numU);\n const uv = Point2d.create();\n const normal = Vector3d.create();\n const du = 1.0 / numU;\n const dv = 1.0 / numV;\n const plane = Plane3dByOriginAndVectors.createXYPlane();\n for (let v = 0; v <= numV; v++) {\n // evaluate new points\n xyzIndex1.clear();\n if (needNormals)\n normalIndex1!.clear();\n if (needParams)\n paramIndex1!.clear();\n for (let u = 0; u <= numU; u++) {\n const uFrac = u * du;\n const vFrac = v * dv;\n surface.uvFractionToPointAndTangents(uFrac, vFrac, plane);\n xyzIndex1.push(this._polyface.addPoint(plane.origin));\n if (needNormals) {\n plane.vectorU.crossProduct(plane.vectorV, normal);\n normal.normalizeInPlace();\n if (reverse)\n normal.scaleInPlace(-1.0);\n normalIndex1!.push(this._polyface.addNormal(normal));\n }\n if (needParams)\n paramIndex1!.push(\n this._polyface.addParam(\n Point2d.create(uMap ? uMap.fractionToPoint(uFrac) : uFrac, vMap ? vMap.fractionToPoint(vFrac) : vFrac, uv),\n ),\n );\n }\n if (v > 0) {\n for (let u = 0; u < numU; u++) {\n if (!this._options.shouldTriangulate) {\n this.addIndexedQuadPointIndexes(\n xyzIndex0.atUncheckedIndex(u), xyzIndex0.atUncheckedIndex(u + 1),\n xyzIndex1.atUncheckedIndex(u), xyzIndex1.atUncheckedIndex(u + 1),\n false,\n );\n if (needNormals)\n this.addIndexedQuadNormalIndexes(\n normalIndex0!.atUncheckedIndex(u), normalIndex0!.atUncheckedIndex(u + 1),\n normalIndex1!.atUncheckedIndex(u), normalIndex1!.atUncheckedIndex(u + 1),\n );\n if (needParams)\n this.addIndexedQuadParamIndexes(\n paramIndex0!.atUncheckedIndex(u), paramIndex0!.atUncheckedIndex(u + 1),\n paramIndex1!.atUncheckedIndex(u), paramIndex1!.atUncheckedIndex(u + 1),\n );\n this._polyface.terminateFacet();\n } else {\n this.addIndexedTrianglePointIndexes(\n xyzIndex0.atUncheckedIndex(u), xyzIndex0.atUncheckedIndex(u + 1),\n xyzIndex1.atUncheckedIndex(u), false);\n if (needNormals)\n this.addIndexedTriangleNormalIndexes(\n normalIndex0!.atUncheckedIndex(u), normalIndex0!.atUncheckedIndex(u + 1),\n normalIndex1!.atUncheckedIndex(u),\n );\n if (needParams)\n this.addIndexedTriangleParamIndexes(\n paramIndex0!.atUncheckedIndex(u), paramIndex0!.atUncheckedIndex(u + 1),\n paramIndex1!.atUncheckedIndex(u),\n );\n this._polyface.terminateFacet();\n this.addIndexedTrianglePointIndexes(\n xyzIndex1.atUncheckedIndex(u),\n xyzIndex0.atUncheckedIndex(u + 1),\n xyzIndex1.atUncheckedIndex(u + 1),\n false,\n );\n if (needNormals)\n this.addIndexedTriangleNormalIndexes(\n normalIndex1!.atUncheckedIndex(u),\n normalIndex0!.atUncheckedIndex(u + 1),\n normalIndex1!.atUncheckedIndex(u + 1),\n );\n if (needParams)\n this.addIndexedTriangleParamIndexes(\n paramIndex1!.atUncheckedIndex(u),\n paramIndex0!.atUncheckedIndex(u + 1),\n paramIndex1!.atUncheckedIndex(u + 1),\n );\n this._polyface.terminateFacet();\n }\n }\n }\n indexSwap = xyzIndex1; xyzIndex1 = xyzIndex0; xyzIndex0 = indexSwap;\n if (needParams)\n indexSwap = paramIndex1; paramIndex1 = paramIndex0; paramIndex0 = indexSwap;\n if (needNormals)\n indexSwap = normalIndex1; normalIndex1 = normalIndex0; normalIndex0 = indexSwap;\n }\n xyzIndex0.clear();\n xyzIndex1.clear();\n }\n /**\n * Create a polyface from a triangulation of the points.\n * * The triangulation is computed as seen in the top view: z-coordinates are ignored.\n * * The highest z-coordinate is preserved for points that are separated by a vertical distance.\n * @param points an array of points.\n * @param options (optional) stroke options:\n * * `options.chordTol`: xy-distance for equating points. For DTM points, 1-2mm may suffice. Default value is\n * `Geometry.smallMetricDistance`.\n * * `options.needNormals`: whether to assign 001 to all facets (rarely useful).\n * * `options.needParams`: whether to assign all vertices uv-parameters equal to their xy-coordinates (rarely useful).\n * @returns triangulated polyface or `undefined` if triangulation was not possible.\n */\n public static pointsToTriangulatedPolyface(points: Point3d[], options?: StrokeOptions): IndexedPolyface | undefined {\n const graph = Triangulator.createTriangulatedGraphFromPoints(points, InsertedVertexZOptions.ReplaceIfLarger, options?.chordTol);\n if (graph)\n return PolyfaceBuilder.graphToPolyface(graph, options);\n return undefined;\n }\n /**\n * Add triangular facets between two linestrings.\n * * Each triangle will have 1 vertex on one of the linestrings and 2 on the other.\n * * Choice of triangles is heuristic, hence does not have a unique solution.\n * * Logic for choosing among the various possible triangles prefers:\n * * Make near-coplanar facets.\n * * Make facets with good aspect ratio.\n * * This is exercised with a limited number of lookahead points, i.e. greedy to make first-available decision.\n * @param pointsA points of first linestring.\n * @param pointsB points of second linestring.\n */\n public addGreedyTriangulationBetweenLineStrings(\n pointsA: Point3d[] | LineString3d | IndexedXYZCollection, pointsB: Point3d[] | LineString3d | IndexedXYZCollection,\n ): void {\n const context = GreedyTriangulationBetweenLineStrings.createContext();\n context.emitTriangles(\n resolveToIndexedXYZCollectionOrCarrier(pointsA),\n resolveToIndexedXYZCollectionOrCarrier(pointsB),\n (triangle: BarycentricTriangle) => { this.addTriangleFacet(triangle.points); },\n );\n }\n /**\n * Add quad facets along a mitered pipe that follows a centerline curve.\n * * At the end of each pipe segment, the pipe is mitered by the plane that bisects the angle between successive\n * centerline segments.\n * * Circular or elliptical pipe cross sections can be specified by supplying either a radius, a pair of semi-axis\n * lengths, or an Arc3d:\n * * For semi-axis length input, x and y correspond to ellipse local axes perpendicular to each other and to the\n * start tangent.\n * * For Arc3d input, the center is translated to the centerline start point. For best results, ensure this arc\n * is perpendicular to the centerline start tangent.\n * * This function internally calls [[CurveFactory.createMiteredSweepSections]], passing in the `startTangent`\n * option to preserve the rotation of Arc3d-type `sectionData`.\n * @param centerline centerline of pipe. If curved, it will be stroked using the builder's StrokeOptions, otherwise\n * for best results, ensure no successive duplicate points with e.g., [[GrowableXYZArray.createCompressed]].\n * @param sectionData circle radius, ellipse semi-axis lengths, or Arc3d.\n * @param numFacetAround how many equal parameter-space chords around each section.\n * @param capped if `true`, add a cap at each end of the pipe; defaults to `false`.\n */\n public addMiteredPipes(\n centerline: IndexedXYZCollection | Point3d[] | CurvePrimitive,\n sectionData: number | XAndY | Arc3d,\n numFacetAround: number = 12,\n capped: boolean = false,\n ): void {\n const arc = CurveFactory.createArcFromSectionData(centerline, sectionData);\n if (!arc)\n return;\n if (numFacetAround < 3)\n numFacetAround = 3;\n const section = LineString3d.create();\n section.appendFractionalStrokePoints(arc, numFacetAround, 0.0, 1.0, true);\n const strokeOptions = this._options.clone();\n const outputSelect = MiteredSweepOutputSelect.AlsoMesh;\n const startTangent = sectionData instanceof Arc3d ? arc.binormalVector() : undefined; // preserve arc orientation\n const options = { strokeOptions, capped, outputSelect, startTangent };\n const sections = CurveFactory.createMiteredSweepSections(centerline, section, options);\n if (sections && sections.mesh)\n this.addIndexedPolyface(sections.mesh);\n }\n /** Return the polyface index array indices corresponding to the given edge, or `undefined` if error. */\n private getEdgeIndices(edge: SortableEdge): { edgeIndexA: number, edgeIndexB: number } | undefined {\n let indexA = -1; let indexB = -1;\n for (let i = this._polyface.facetIndex0(edge.facetIndex); i < this._polyface.facetIndex1(edge.facetIndex); ++i) {\n if (edge.startVertex === this._polyface.data.pointIndex[i])\n indexA = i;\n else if (edge.endVertex === this._polyface.data.pointIndex[i])\n indexB = i;\n }\n return (indexA < 0 || indexB < 0) ? undefined : { edgeIndexA: indexA, edgeIndexB: indexB };\n }\n /**\n * Create a side face between base and swept facets along a base boundary edge.\n * * Assumes numBaseFacets base facets were added to this builder, immediately followed by the same number of swept\n * facets with opposite orientation (first index not preserved).\n */\n private addSweptFace(baseBoundaryEdge: SortableEdge, numBaseFacets: number): boolean {\n const edge = this.getEdgeIndices(baseBoundaryEdge);\n if (undefined === edge)\n return false;\n const sweptFacetIndex = numBaseFacets + baseBoundaryEdge.facetIndex;\n if (!this._polyface.isValidFacetIndex(sweptFacetIndex))\n return false;\n const numBaseFacetEdges = this._polyface.numEdgeInFacet(baseBoundaryEdge.facetIndex);\n if (numBaseFacetEdges !== this._polyface.numEdgeInFacet(sweptFacetIndex))\n return false;\n // generate indices into the polyface index arrays\n const baseFacetIndexStart = this._polyface.facetIndex0(baseBoundaryEdge.facetIndex);\n const sweptFacetIndexStart = this._polyface.facetIndex0(sweptFacetIndex);\n const edgeIndexOffsetInFaceLoopA = edge.edgeIndexA - baseFacetIndexStart;\n const edgeIndexOffsetInFaceLoopB = edge.edgeIndexB - baseFacetIndexStart;\n const sweptEdgeIndexOffsetInFaceLoopA = (numBaseFacetEdges - 1) - edgeIndexOffsetInFaceLoopA;\n const sweptEdgeIndexOffsetInFaceLoopB = (numBaseFacetEdges - 1) - edgeIndexOffsetInFaceLoopB;\n const indices = [\n edge.edgeIndexB,\n edge.edgeIndexA,\n sweptFacetIndexStart + sweptEdgeIndexOffsetInFaceLoopA,\n sweptFacetIndexStart + sweptEdgeIndexOffsetInFaceLoopB,\n ];\n const vertices: Point3d[] = [];\n let colors: number[] | undefined; // try to re-use colors; missing normals and params will be computed if needed\n if (undefined !== this.options.needColors && undefined !== this._polyface.data.color && undefined !== this._polyface.data.colorIndex)\n colors = [];\n for (let i = 0; i < 4; ++i) {\n const xyz = this._polyface.data.getPoint(this._polyface.data.pointIndex[indices[i]]);\n if (undefined === xyz)\n return false;\n vertices.push(xyz);\n if (undefined !== colors) {\n const color = this._polyface.data.getColor(this._polyface.data.colorIndex![indices[i]]);\n if (undefined === color)\n return false;\n colors.push(color);\n }\n }\n this.addQuadFacet(vertices, undefined, undefined, colors);\n return true;\n }\n /**\n * Add facets from the source polyface, from its translation along the vector, and from its swept boundary edges,\n * to form a polyface that encloses a volume.\n * @param source the surface mesh to sweep.\n * @param sweepVector the direction and length to sweep the surface mesh.\n * @param triangulateSides whether to triangulate side facets, or leave as quads.\n * @returns whether the added facets comprise a simple sweep. If false, the resulting mesh may have self-intersections,\n * be non-manifold, have inconsistently oriented facets, etc.\n */\n public addSweptIndexedPolyface(\n source: IndexedPolyface, sweepVector: Vector3d, triangulateSides: boolean = false,\n ): boolean {\n let isSimpleSweep = true;\n const totalProjectedArea = PolyfaceQuery.sumFacetAreas(source, sweepVector);\n if (Geometry.isAlmostEqualNumber(0.0, totalProjectedArea))\n isSimpleSweep = false;\n const partitionedIndices = PolyfaceQuery.partitionFacetIndicesByVisibilityVector(\n source, sweepVector, Angle.createDegrees(1.0e-3),\n );\n const numForwardFacets = partitionedIndices[0].length;\n const numBackwardFacets = partitionedIndices[1].length;\n const numSideFacets = partitionedIndices[2].length;\n if (numSideFacets > 0)\n isSimpleSweep = false;\n if (numForwardFacets > 0 && numBackwardFacets > 0)\n isSimpleSweep = false;\n // add base and swept facets with opposite orientations\n const reverseBase = numForwardFacets > 0;\n const firstBaseFacet = this._polyface.facetCount;\n this.addIndexedPolyface(source, reverseBase);\n const firstSweptFacet = this._polyface.facetCount;\n this.addIndexedPolyface(source, !reverseBase, Transform.createTranslation(sweepVector));\n // collect base edges added to the builder, and extract boundary\n const numBaseFacets = firstSweptFacet - firstBaseFacet;\n const baseFacetIndices = Array.from({ length: numBaseFacets }, (_, i) => firstBaseFacet + i);\n const baseFacetVisitor = IndexedPolyfaceSubsetVisitor.createSubsetVisitor(this._polyface, baseFacetIndices, 1);\n const baseEdges = PolyfaceQuery.createIndexedEdges(baseFacetVisitor);\n const baseBoundaryEdges: SortableEdgeCluster[] = [];\n baseEdges.sortAndCollectClusters(undefined, baseBoundaryEdges, undefined, undefined);\n // add a side face per boundary edge\n const oldShouldTriangulate = this._options.shouldTriangulate;\n this._options.shouldTriangulate = triangulateSides;\n for (const edgeOrCluster of baseBoundaryEdges) {\n if (edgeOrCluster instanceof SortableEdge)\n this.addSweptFace(edgeOrCluster, numBaseFacets);\n else if (Array.isArray(edgeOrCluster))\n for (const edge of edgeOrCluster)\n this.addSweptFace(edge, numBaseFacets);\n }\n this._options.shouldTriangulate = oldShouldTriangulate;\n return isSimpleSweep;\n }\n}\nfunction resolveToIndexedXYZCollectionOrCarrier(points: Point3d[] | LineString3d | IndexedXYZCollection): IndexedXYZCollection {\n if (Array.isArray(points))\n return new Point3dArrayCarrier(points);\n if (points instanceof LineString3d)\n return points.packedPoints;\n return points;\n}\nfunction distinctIndices(i0: number, i1: number, i2: number): boolean {\n return i0 !== i1 && i1 !== i2 && i2 !== i0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PolyfaceBuilder.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceBuilder.ts"],"names":[],"mappings":"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"}
|