BSplineSurface3dH Class
BSpline Surface in xyzw homogeneous space
Extends
Implements
Methods
| Name | Description | |
|---|---|---|
| clone(): BSplineSurface3dH | Return a deep clone | |
| cloneTransformed(transform: Transform): BSplineSurface3dH | Return a transformed clone | |
| copyKnots(select: UVSelect, includeExtraEndKnot: boolean): number[] | return a simple array form of the knots. | |
| copyPoints4d(): Point4d[] | Unpack the control points to a Point4d array of form [wx,wy,wz,w]. | |
| copyPointsAndWeights(points: Point3d[], weights: number[], formatter: (x: number, y: number, z: number) => any...): void | Unpack the control points to a Point3d array and an array of weights. | |
| copyWeightsToFloat64Array(): Float64Array | unpack from xyzw xyzw ... | |
| copyXYZToFloat64Array(unweight: boolean): Float64Array | Copy the control points to a packed 3D array. | |
| dispatchToGeometryHandler(handler: GeometryHandler): any | Second step of double dispatch:  call handler.handleBSplineSurface3dH(this) | |
| extendRange(rangeToExtend: Range3d, transform?: Transform): void | extend a range to include the (optionally transformed) points of this surface | |
| fractionToPoint(fractionU: number, fractionV: number, result?: Point3d): Point3d | Evaluate the surface and return the Cartesian point (weight = 1). | |
| fractionToPoint4d(fractionU: number, fractionV: number, result?: Point4d): Point4d | Evaluate the Point4d (leaving weights in the point) at given fractional coordinates. | |
| fractionToPointAndDerivatives(fractionU: number, fractionV: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | evaluate the surface at u and v fractions. | |
| 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 otheris an instance of `BSplineSurface3dH | |
| knotToPoint(knotU: number, knotV: number, result?: Point3d): Point3d | * evaluate the surface and return the cartesian (weight = 1) point. | |
| knotToPoint4d(u: number, v: number, result?: Point4d): Point4d | Evaluate at a position given by a knot value. | |
| 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.addUVGridBodyto facet this B-spline surface. | |
| uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | Implementation of the UVSurface interface; allows PolyfaceBuilder.addUVGridBodyto facet this B-spline surface. | |
| create(controlPointArray: Float64Array | Point3d[], weightArray: Float64Array | number[], numPolesU: number, orderU: number, knotArrayU: Float64Array | number[], numPolesV: number, orderV: number, knotArrayV: Float64Array | number[]): undefined | BSplineSurface3dH Static | Create a weighted bspline surface, with control points and weights each organized as flattened arrays continuing from one U row to the next. | |
| createGrid(xyzwGrid: number[][][], weightStyle: WeightStyle, orderU: number, knotArrayU: Float64Array | number[], orderV: number, knotArrayV: Float64Array | number[]): undefined | BSplineSurface3dH Static | Create a bspline surface with given knots. | 
Inherited methods
| Name | Inherited from | Description | 
|---|---|---|
| degreeUV(select: UVSelect): number Inherited | BSpline2dNd | Return the degree (one less than order) for the selectdirection (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 selectdirection (0 or 1) | 
| numSpanUV(select: UVSelect): number Inherited | BSpline2dNd | Return the number of spans (INCLUDING NULL SPANS) for the selectdirection (0 or 1) | 
| orderUV(select: UVSelect): number Inherited | BSpline2dNd | Return the order (one more than degree) for the selectdirection (0 or 1) | 
| poleStepUV(select: UVSelect): number Inherited | BSpline2dNd | Return the step between adjacent poles for the selectdirection (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 degreeleading 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 ordernumbers | 
| _basisBufferUV Protected Inherited | Float64Array[] | BSpline2dNd | a scratch array sized for ordernumbers | 
| _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
- bspline/BSplineSurface.ts Line 819
Last Updated: 24 June, 2025
Found something wrong, missing, or unclear on this page? Raise an issue in our repo.