BSplineSurface3d Class

BSplineSurface3d is a parametric surface in xyz space.

  • This (BSplineSurface3d) is an unweighted surface. Use the separate class BSplineSurface3dH for a weighted surface.

The various static "create" methods have subtle differences in how grid sizes are conveyed: | Method | control point array | counts | | create | flat array of [x,y,z] | arguments numPolesU, numPolesV | | createGrid | array of array of [x,y,z ] | There are no numPolesU or numPolesV args. The counts are conveyed by the deep arrays |

Extends

Implements

Methods

Name Description
clone(): BSplineSurface3d Return a complete copy of the bspline surface.  
cloneTransformed(transform: Transform): BSplineSurface3d Return a complete copy of the bspline surface, with a transform applied to the control points.  
copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[] return a simple array form of the knots.  
copyPointsFloat64Array(): Float64Array Return a simple array of the control points coordinates  
dispatchToGeometryHandler(handler: GeometryHandler): any Second step of double dispatch: call handler.handleBSplineSurface3d(this)  
extendRange(rangeToExtend: Range3d, transform?: Transform): void Extend the range to include all poles  
fractionToPoint(fractionU: number, fractionV: number): Point3d Evaluate at a position given by fractional coordinate in each direction.  
fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors evaluate the surface at u and v fractions.  
getPointArray(flatArray: booleantrue): any[] Return control points json arrays.  
getPointGridJSON(): PackedPointGrid Return control points json arrays.  
getPole(i: number, j: number, result?: Point3d): undefined | Point3d Return a pole by u and v indices  
isAlmostEqual(other: any): boolean test for identical counts and near-equal coordinates  
isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean Test if all poles are in a plane  
isSameGeometryClass(other: any): boolean Test if other is an instance of `BSplineSurface3d  
knotToPoint(u: number, v: number): Point3d Evaluate at a position given by u and v coordinates in knot space.  
knotToPointAndDerivatives(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors Evaluate at a position given by a knot value.  
tryTransformInPlace(transform: Transform): boolean Apply the transform to the poles  
uvFractionToPoint(u: number, v: number): Point3d Implementation of the UVSurface interface; allows PolyfaceBuilder.addUVGridBody to facet this B-spline surface.  
uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors Implementation of the UVSurface interface; allows PolyfaceBuilder.addUVGridBody to facet this B-spline surface.  
create(controlPointArray: Float64Array | Point3d[], numPolesU: number, orderU: number, knotArrayU: Float64Array | number[], numPolesV: number, orderV: number, knotArrayV: Float64Array | number[]): undefined | BSplineSurface3d Static Create a bspline surface.  
createGrid(points: number[][][], orderU: number, knotArrayU: Float64Array | number[], orderV: number, knotArrayV: Float64Array | number[]): undefined | BSplineSurface3d Static Create a bspline surface.  

Inherited methods

Name Inherited from Description
degreeUV(select: UVSelect): number Inherited BSpline2dNd Return the degree (one less than order) for the select direction (0 or 1)
evaluateBuffersAtKnot(u: number, v: number, numDerivative: number0): void Inherited BSpline2dNd Evaluate the _basisBuffer, _poleBuffer and (optionally) _basisBuffer1 and _poleBuffer1 arrays at given knot.
extendRangeXYZ(rangeToExtend: Range3d, transform?: Transform): void Inherited BSpline2dNd extend a range, treating each block as simple XYZ
extendRangeXYZH(rangeToExtend: Range3d, transform?: Transform): void Inherited BSpline2dNd extend a range, treating each block as homogeneous xyzw, with weight at offset 3
fractionToRigidFrame(fractionU: number, fractionV: number, result?: Transform): undefined | Transform Inherited BSpline2dNd evaluate the surface at u and v fractions.
getPoint3dPole(i: number, j: number, result?: Point3d): undefined | Point3d Inherited BSpline2dNd Get the indexed Point3d.
getPoint3dPoleXYZW(i: number, j: number, result?: Point3d): undefined | Point3d Inherited BSpline2dNd Get the indexed Point3d, projecting the weight away to get to xyz.
getPoint4dPole(i: number, j: number, result?: Point4d): undefined | Point4d Inherited BSpline2dNd Get the indexed Point4d.
getWrappable(select: UVSelect): BSplineWrapMode Inherited BSpline2dNd Get the flag indicating the surface might be suitable for having wrapped "closed" interpretation.
isClosable(select: UVSelect): boolean Inherited BSpline2dNd Test knots and control points to determine if it is possible to close (aka "wrap") the surface in the selected parametric direction.
isClosableSurface(select: UVSelect): BSplineWrapMode Inherited BSpline2dNd Test knots and control points to determine if it is possible to close (aka "wrap") the surface in the selected parametric direction.
numberToUVSelect(value: number): UVSelect Inherited BSpline2dNd Return 0 for 0 input, 1 for any nonzero input.
numPolesTotal(): number Inherited BSpline2dNd Return the total number of poles (product of x and y pole counts)
numPolesUV(select: UVSelect): number Inherited BSpline2dNd Return the number of poles for the select direction (0 or 1)
numSpanUV(select: UVSelect): number Inherited BSpline2dNd Return the number of spans (INCLUDING NULL SPANS) for the select direction (0 or 1)
orderUV(select: UVSelect): number Inherited BSpline2dNd Return the order (one more than degree) for the select direction (0 or 1)
poleStepUV(select: UVSelect): number Inherited BSpline2dNd Return the step between adjacent poles for the select direction (0 or 1)
range(transform?: Transform, result?: Range3d): Range3d Inherited BSpline2dNd Return the range of the entire GeometryQuery tree.
reverseInPlace(select: UVSelect): void Inherited BSpline2dNd Reverse the parameter direction for either u or v.
setWrappable(select: UVSelect, value: BSplineWrapMode): void Inherited BSpline2dNd Set the flag indicating the surface might be suitable for having wrapped "closed" interpretation.
spanFractionsToBasisFunctions(select: UVSelect, spanIndex: number, spanFraction: number, f: Float64Array, df?: Float64Array): boolean Inherited BSpline2dNd Evaluate basis functions given
spanFractionToKnot(select: UVSelect, span: number, localFraction: number): number Inherited BSpline2dNd Map a position, specified as (uv direction, bezier span, fraction within the bezier), to an overall knot value.
sumpoleBufferDerivativesForSpan(spanIndexU: number, spanIndexV: number): void Inherited BSpline2dNd sum poles by the weights in the basisBuffer, using poles for given span
sumPoleBufferDerivativesForSpan(spanIndexU: number, spanIndexV: number): void Inherited BSpline2dNd sum derivatives by the weights in the basisBuffer, using poles for given span
sumPoleBufferForSpan(spanIndexU: number, spanIndexV: number): void Inherited BSpline2dNd sum poles by the weights in the basisBuffer, using poles for given span
testClosableGrid(select: UVSelect, mode?: BSplineWrapMode): boolean Inherited BSpline2dNd Test if degree leading and trailing (one of U or V) blocks match, as if the data is a non-periodic physically closed spline in the selected direction.
tryTranslateInPlace(dx: number, dy: number0.0, dz: number0.0): boolean Inherited BSpline2dNd Try to move the geometry by dx,dy,dz.
areAlmostEqual(a: GeometryQuery, b: GeometryQuery): boolean Static Inherited BSpline2dNd Apply instance method isAlmostEqual if both are defined.
isWrappedGrid(data: Float64Array, numRows: number, numColumns: number, dimension: number, blockLength: number, select: UVSelect): boolean Static Inherited BSpline2dNd Test if leading and trailing blocks of points match in a given direction.
validOrderAndPoleCounts(orderU: number, numPolesU: number, orderV: number, numPolesV: number, numUV: number): boolean Static Inherited BSpline2dNd Confirm that order and pole counts agree for both u and v directions

Inherited properties

Name Type Inherited from Description
_basisBuffer1UV Protected Inherited Float64Array[] BSpline2dNd a scratch array sized for order numbers
_basisBufferUV Protected Inherited Float64Array[] BSpline2dNd a scratch array sized for order numbers
_poleBuffer Protected Inherited Float64Array BSpline2dNd a scratch array sized for one pole
_poleBuffer1UV Protected Inherited Float64Array[] BSpline2dNd array of 2 scratch array, each sized for one pole
children Accessor Inherited ReadOnly undefined | GeometryQuery[] BSpline2dNd Return GeometryQuery children for recursive queries.
* leaf classes do not need to implement.
coffs Inherited Float64Array BSpline2dNd flat array of coordinate data, blocked by poleDimension and row
geometryCategory Readonly Inherited "bsurf" BSpline2dNd String name for schema properties
knots Inherited KnotVector[] BSpline2dNd Array of (exactly 2) knot vectors for the u, v directions
poleDimension Inherited number BSpline2dNd Number of components per pole.

Defined in

Last Updated: 17 December, 2024