API Reference > geometry-core > Bspline > BSpline2dNd BSpline2dNd Class Bspline knots and poles for 2d-to-Nd. This abstract class in not independently instantiable -- GeometryQuery methods must be implemented by derived classes. Extends GeometryQuery Extended by BSplineSurface3d BSplineSurface3dH Methods Name Description constructor(numPolesU: number, numPolesV: number, poleLength: number, knotsU: KnotVector, knotsV: KnotVector, coffs: Float64Array): BSpline2dNd Protected initialize arrays for given spline dimensions. degreeUV(select: UVSelect): number Return the degree (one less than order) for the select direction (0 or 1) evaluateBuffersAtKnot(u: number, v: number, numDerivative: number = 0): void Evaluate the _basisBuffer, _poleBuffer and (optionally) _basisBuffer1 and _poleBuffer1 arrays at given knot. extendRangeXYZ(rangeToExtend: Range3d, transform?: Transform): void extend a range, treating each block as simple XYZ extendRangeXYZH(rangeToExtend: Range3d, transform?: Transform): void extend a range, treating each block as homogeneous xyzw, with weight at offset 3 fractionToPointAndDerivatives(_fractionU: number, _fractionV: number, _result?: Plane3dByOriginAndVectors): undefined | Plane3dByOriginAndVectors Abstract abstract declaration for evaluation of (unweighted) 3d point and derivatives. fractionToRigidFrame(fractionU: number, fractionV: number, result?: Transform): undefined | Transform evaluate the surface at u and v fractions. getPoint3dPole(i: number, j: number, result?: Point3d): undefined | Point3d Get the Point3d by row and column. getPoint3dPoleXYZW(i: number, j: number, result?: Point3d): undefined | Point3d Get the Point3d by row and column, projecting the weight away to get to xyz isClosable(select: UVSelect): boolean Test if degree leading and trailing (one of U or V) blocks match, as if the data is an unwrapped closed spline in the selected direction. numPolesTotal(): number Return the total number of poles (product of x and y pole counts) numPolesUV(select: UVSelect): number Return the number of poles for the select direction (0 or 1) numSpanUV(select: UVSelect): number Return the number of spans (INCLUDING NULL SPANS) for the select direction (0 or 1) numberToUVSelect(value: number): UVSelect Return 0 for 0 input, 1 for any nonzero input. orderUV(select: UVSelect): number Return the order (one more than degree) for the select direction (0 or 1) poleStepUV(select: UVSelect): number Return the step between adjacent poles for the select direction (0 or 1) reverseInPlace(select: UVSelect): void Reverse the parameter direction for either u or v. setWrappable(select: UVSelect, value: BSplineWrapMode): void Set the flag indicating the bspline might be suitable for having wrapped "closed" interpretation. spanFractionToKnot(select: UVSelect, span: number, localFraction: number): number Map a position, specified as (uv direction, bezier span, fraction within the bezier), to an overall knot value. spanFractionsToBasisFunctions(select: UVSelect, spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array): void Evaluate basis functions given sumPoleBufferForSpan(spanIndexU: number, spanIndexV: number): void sum poles by the weights in the basisBuffer, using poles for given span sumpoleBufferDerivativesForSpan(spanIndexU: number, spanIndexV: number): void sum derivatives by the weights in the basisBuffer, using poles for given span validOrderAndPoleCounts(orderU: number, numPolesU: number, orderV: number, numPolesV: number, numUV: number): boolean Static Confirm that order and pole counts agree for both u and v directions Inherited methods Name Inherited from Description clone(): undefined | GeometryQuery Abstract GeometryQuery return a clone cloneTransformed(transform: Transform): undefined | GeometryQuery Abstract GeometryQuery return a transformed clone. dispatchToGeometryHandler(handler: GeometryHandler): any Abstract GeometryQuery * "double dispatch" call pattern. extendRange(rangeToExtend: Range3d, transform?: Transform): void Abstract GeometryQuery extend rangeToExtend by the range of this geometry multiplied by the transform isAlmostEqual(other: GeometryQuery): boolean GeometryQuery test for exact structure and nearly identical geometry. isSameGeometryClass(other: GeometryQuery): boolean Abstract GeometryQuery test if (other instanceof this.Type). range(transform?: Transform, result?: Range3d): Range3d GeometryQuery return the range of the entire (tree) GeometryQuery tryTransformInPlace(transform: Transform): boolean Abstract GeometryQuery Attempt to transform in place. tryTranslateInPlace(dx: number, dy: number = 0.0, dz: number = 0.0): boolean GeometryQuery try to move the geometry by dx,dy,dz areAlmostEqual(a: undefined | GeometryQuery, b: undefined | GeometryQuery): boolean Static GeometryQuery apply instance method isAlmostEqual if both are defined. Properties Name Type Description _basisBuffer1UV Protected Float64Array[] a scratch array sized for order numbers _basisBufferUV Protected Float64Array[] a scratch array sized for order numbers _poleBuffer Protected Float64Array a scratch array sized for one pole _poleBuffer1UV Protected Float64Array[] array of 2 scratch array, each sized for one pole coffs Float64Array flat array of coordinate daa, blocked by poleDimension and row geometryCategory Readonly "bsurf" String name for schema properties knots KnotVector[] Array of (exactly 2) knot vectors for the u, v directions poleDimension number Number of components per pole. Inherited properties Name Type Inherited from Description children Accessor ReadOnly undefined | GeometryQuery[] GeometryQuery return GeometryQuery children for recursive queries.* leaf classes do not need to implement. Defined in bspline/BSplineSurface.ts Line 165 Last Updated: 12 June, 2024