CAD Exchanger SDK
cadex::ModelData_BSplineSurface Class Reference

Defines a B-Spline surface. More...

Inheritance diagram for cadex::ModelData_BSplineSurface:
cadex::ModelData_Surface

Public Member Functions

 ModelData_BSplineSurface ()
 Constructor. More...
 
 ModelData_BSplineSurface (const ModelData_Point thePoles[], int theNumberOfUPoles, int theNumberOfVPoles, const double theUKnots[], const double theVKnots[], int theNumberOfUKnots, int theNumberOfVKnots, const int theUMults[], const int theVMults[], int theUDegree, int theVDegree, bool theIsUPeriodic=false, bool theIsVPeriodic=false)
 Constructor. More...
 
 ModelData_BSplineSurface (const ModelData_Point thePoles[], const double thePoleWeights[], int theNumberOfUPoles, int theNumberOfVPoles, const double theUKnots[], const double theVKnots[], int theNumberOfUKnots, int theNumberOfVKnots, const int theUMults[], const int theVMults[], int theUDegree, int theVDegree, bool theIsUPeriodic=false, bool theIsVPeriodic=false)
 Constructor. More...
 
 ModelData_BSplineSurface (const Handle_C &)
 Constructor.
 
int UDegree () const
 Returns U-degree. More...
 
int VDegree () const
 Returns V-degree. More...
 
int NumberOfUKnots () const
 Returns number of unique U-knots. More...
 
int NumberOfUPoles () const
 Returns number of U-poles. More...
 
int NumberOfVKnots () const
 Returns number of unique V-knots. More...
 
int NumberOfVPoles () const
 Returns number of V-poles. More...
 
double UKnot (int theUIndex) const
 Returns a U-knot value. More...
 
int UKnots (double theUKnots[]) const
 Populates a vector of U-knots. More...
 
double VKnot (int theVIndex) const
 Returns a V-knot value. More...
 
int VKnots (double theVKnots[]) const
 Populates a vector of V-knots. More...
 
int UMultiplicity (int theUIndex) const
 Returns a U knot multiplicity. More...
 
int UMultiplicities (int theUMultiplicities[]) const
 Populates a vector of U knot multiplicities. More...
 
int VMultiplicity (int theVIndex) const
 Returns a V knot multiplicity. More...
 
int VMultiplicities (int theVMultiplicities[]) const
 Populates a vector of V knot multiplicities. More...
 
ModelData_Point Pole (int theUIndex, int theVIndex) const
 Returns a pole value. More...
 
int Poles (ModelData_Point thePoles[]) const
 Populates a 2D table of poles. More...
 
double Weight (int theUIndex, int theVIndex) const
 Returns a weight value. More...
 
int Weights (double theWeights[]) const
 Populates a 2D table of weights. More...
 
 operator const Handle_C & () const
 Cast operator.
 
- Public Member Functions inherited from cadex::ModelData_Surface
 ModelData_Surface ()
 Constructor.
 
 ModelData_Surface (const ModelData_Surface &theOther)
 Constructor.
 
 ModelData_Surface (ModelData_Surface &&theOther)
 Constructor.
 
 ~ModelData_Surface ()
 Destructor.
 
ModelData_Surfaceoperator= (const ModelData_Surface &theOther)
 Assignment operator.
 
ModelData_Surfaceoperator= (ModelData_Surface &&theOther)
 Move assignment operator.
 
 operator const Handle_C & () const
 Cast operator.
 
ModelData_SurfaceType Type () const
 Returns a surface type.
 
bool IsNull () const
 Returns true if the object has not been initialized yet.
 
 operator bool () const
 
bool IsUPeriodic () const
 Returns true if the surface is periodic in U direction. More...
 
bool IsVPeriodic () const
 Returns true if the surface is periodic in V direction. More...
 
double UMin () const
 Returns a minimum parameter of a definition domain in U direction. More...
 
double UMax () const
 Returns a maximum parameter of a definition domain in U direction. More...
 
double VMin () const
 Returns a minimum parameter of a definition domain in V direction. More...
 
double VMax () const
 Returns a maximum parameter of a definition domain in V direction. More...
 
void Domain (double &theUMin, double &theUMax, double &theVMin, double &theVMax) const
 Returns a definition domain. More...
 
ModelData_Point Value (double theParameterU, double theParameterV) const
 Evaluates a point on the surface. More...
 
void Transform (const ModelData_Transformation &theTransformation)
 Applies transformation matrix to this object. More...
 
ModelData_Surface Transformed (const ModelData_Transformation &theTransformation) const
 Returns a copy this object after applying transformation. More...
 
ModelData_Continuity Continuity () const
 Returns a continuity type of the surface.
 
void D0 (double theParameterU, double theParameterV, ModelData_Point &theValue) const
 Returns the point theValue of parameter theU, theV on the surface. More...
 
void D1 (double theParameterU, double theParameterV, ModelData_Point &theValue, ModelData_Vector &theD1U, ModelData_Vector &theD1V) const
 Returns the point theValue and the first derivatives in the directions U theD1U and V theD1V at this point. More...
 
void D2 (double theParameterU, double theParameterV, ModelData_Point &theValue, ModelData_Vector &theD1U, ModelData_Vector &theD1V, ModelData_Vector &theD2U, ModelData_Vector &theD2V, ModelData_Vector &theD2UV) const
 Returns the point theValue, the first and the second derivatives in the directions U and V at this point. More...
 
bool DN (double theParameterU, double theParameterV, size_t theDerivativeOrder, ModelData_Point &theValue, ModelData_Vector theD[]) const
 
void Curvature (double theParameterU, double theParameterV, ModelData_Vector &thePrincipalMaxDirection, ModelData_Vector &thePrincipalMinDirection) const
 Returns the max and min principal curvature directions multiplied by max and min value of curvature respectively.
 
void Normal (double theParameterU, double theParameterV, ModelData_Direction &theNormal) const
 Returns the normal direction theNormal at the current point.
 
void Mirror (const ModelData_Point &thePoint)
 Mirrors the surface relative to the point.
 
void Mirror (const ModelData_Axis1Placement &theAxis)
 Mirrors the surface relative to the axis placement.
 
void Mirror (const ModelData_Axis2Placement &theAxis)
 Mirrors the surface relative to the axis placement.
 
template<typename T >
ModelData_Surface Mirrored (const T &theRef) const
 
void Rotate (const ModelData_Axis1Placement &theAxis, double theAngle)
 Rotates the surface around the axis.
 
ModelData_Surface Rotated (const ModelData_Axis1Placement &theAxis, double theAngle)
 
void Translate (const ModelData_Vector &theVector)
 Translates the surface along the vector.
 
ModelData_Surface Translated (const ModelData_Vector &theVector)
 
void Scale (const ModelData_Point &thePoint, double theScale)
 Scales the surface with respect to the point.
 
ModelData_Surface Scaled (const ModelData_Point &thePoint, double theScale)
 

Additional Inherited Members

- Protected Member Functions inherited from cadex::ModelData_Surface
 ModelData_Surface (const Handle_C &, ModelData_SurfaceType)
 Constructor.
 
internal::ModelData_SurfaceImpl & Impl ()
 Returns internal implementation object.
 

Detailed Description

Defines a B-Spline surface.

B-Spline surface is defined by degree, control points (poles), their weights, unique knots and their multiplicities. The following image depicts an example of a B-Spline surface:

bspline_surface.png
B-Spline surface

For introduction to and mathematical definition of NURBS please refer to external resources, for instance:

A rational B-Spline contains an explicit vector of weights, whereas polynomial does not.

The number of poles must equal the number of weights. The number of poles in each direction (U or V) is defined via the following formulas:

  • for non-periodic B-Spline: number_of_poles = sum_of_knot_multiplicities - degree - 1;
  • for periodic B-Spline: number_of_poles = sum_of_knot_multiplicities - start_multiplicity.

B-Splines of degree up to 25 are supported.

Constructor & Destructor Documentation

◆ ModelData_BSplineSurface() [1/3]

cadex::ModelData_BSplineSurface::ModelData_BSplineSurface ( )
inline

Constructor.

Empty constructor.

◆ ModelData_BSplineSurface() [2/3]

cadex::ModelData_BSplineSurface::ModelData_BSplineSurface ( const ModelData_Point  thePoles[],
int  theNumberOfUPoles,
int  theNumberOfVPoles,
const double  theUKnots[],
const double  theVKnots[],
int  theNumberOfUKnots,
int  theNumberOfVKnots,
const int  theUMults[],
const int  theVMults[],
int  theUDegree,
int  theVDegree,
bool  theIsUPeriodic = false,
bool  theIsVPeriodic = false 
)

Constructor.

Creates a polynomial B-Spline surface.

Parameters:

  • thePoles contains a 2D table of poles, with size equal to theNumberOfUPoles * theNumberOfVPoles; theNumberOfUPoles and theNumberOfVPoles must be >=2 each;
  • theNumberOfUKnots defines the length of theUKnots and theUMults and must be >=2;
  • theNumberOfVKnots defines the length of theVKnots and theVMults and must be >=2;
  • theUDegree and theVDegree must belong to range [1, 25];
  • theIsUPeriodic and theIsVPeriodic specify if the B-Spline is periodic in U and/or V direction respectively.

Number of poles in U and V direction must meet the requirements described above.

◆ ModelData_BSplineSurface() [3/3]

cadex::ModelData_BSplineSurface::ModelData_BSplineSurface ( const ModelData_Point  thePoles[],
const double  thePoleWeights[],
int  theNumberOfUPoles,
int  theNumberOfVPoles,
const double  theUKnots[],
const double  theVKnots[],
int  theNumberOfUKnots,
int  theNumberOfVKnots,
const int  theUMults[],
const int  theVMults[],
int  theUDegree,
int  theVDegree,
bool  theIsUPeriodic = false,
bool  theIsVPeriodic = false 
)

Constructor.

Creates a rational B-Spline surface.

Parameters:

  • thePoles contains a 2D table of poles, with size equal to theNumberOfUPoles * theNumberOfVPoles; theNumberOfUPoles and theNumberOfVPoles must be >=2 each;
  • thePoleWeights defines pole weights and must have the same size and layout as thePoles;
  • theNumberOfUKnots defines the length of theUKnots and theUMults and must be >=2;
  • theNumberOfVKnots defines the length of theVKnots and theVMults and must be >=2;
  • theUDegree and theVDegree must belong to range [1, 25];
  • theIsUPeriodic and theIsVPeriodic specify if the B-Spline is periodic in U and/or V direction respectively.

Number of poles in U and V direction must meet the requirements described above.

Poles are to be provided after division by their weights.

Member Function Documentation

◆ NumberOfUKnots()

int cadex::ModelData_BSplineSurface::NumberOfUKnots ( ) const

Returns number of unique U-knots.

Returns the value specified in the constructor.

◆ NumberOfUPoles()

int cadex::ModelData_BSplineSurface::NumberOfUPoles ( ) const

Returns number of U-poles.

Returns the value specified in the constructor.

◆ NumberOfVKnots()

int cadex::ModelData_BSplineSurface::NumberOfVKnots ( ) const

Returns number of unique V-knots.

Returns the value specified in the constructor.

◆ NumberOfVPoles()

int cadex::ModelData_BSplineSurface::NumberOfVPoles ( ) const

Returns number of V-poles.

Returns the value specified in the constructor.

◆ Pole()

ModelData_Point cadex::ModelData_BSplineSurface::Pole ( int  theUIndex,
int  theVIndex 
) const

Returns a pole value.

theUIndex must be in the range [1, NumberOfUPoles()], theVIndex in the range [1, NumberOfVPoles()].

See also
Weight().

◆ Poles()

int cadex::ModelData_BSplineSurface::Poles ( ModelData_Point  thePoles[]) const

Populates a 2D table of poles.

thePoles must point to a buffer in memory with at least NumberOfUPoles() * NumberOfVPoles() preallocated values.

Returns NumberOfUPoles() * NumberOfVPoles().

See also
Weights().

◆ UDegree()

int cadex::ModelData_BSplineSurface::UDegree ( ) const

Returns U-degree.

Returns the value specified in the constructor.

◆ UKnot()

double cadex::ModelData_BSplineSurface::UKnot ( int  theUIndex) const

Returns a U-knot value.

theIndex must be in the range [1, NumberOfUKnots()].

See also
UMultiplicity().

◆ UKnots()

int cadex::ModelData_BSplineSurface::UKnots ( double  theUKnots[]) const

Populates a vector of U-knots.

theUKnots must point to a buffer in memory with at least NumberOfUKnots() preallocated values.

Returns NumberOfUKnots().

See also
UMultiplicities().

◆ UMultiplicities()

int cadex::ModelData_BSplineSurface::UMultiplicities ( int  theUMults[]) const

Populates a vector of U knot multiplicities.

theUMults must point to a buffer in memory with at least NumberOfUKnots() preallocated values.

Returns NumberOfUKnots().

See also
UKnots().

◆ UMultiplicity()

int cadex::ModelData_BSplineSurface::UMultiplicity ( int  theUIndex) const

Returns a U knot multiplicity.

theIndex must be in the range [1, NumberOfUKnots()].

See also
UKnot().

◆ VDegree()

int cadex::ModelData_BSplineSurface::VDegree ( ) const

Returns V-degree.

Returns the value specified in the constructor.

◆ VKnot()

double cadex::ModelData_BSplineSurface::VKnot ( int  theVIndex) const

Returns a V-knot value.

theIndex must be in the range [1, NumberOfVKnots()].

See also
VMultiplicity().

◆ VKnots()

int cadex::ModelData_BSplineSurface::VKnots ( double  theVKnots[]) const

Populates a vector of V-knots.

theVKnots must point to a buffer in memory with at least NumberOfVKnots() preallocated values.

Returns NumberOfVKnots().

See also
VMultiplicities().

◆ VMultiplicities()

int cadex::ModelData_BSplineSurface::VMultiplicities ( int  theVMults[]) const

Populates a vector of V knot multiplicities.

theVMults must point to a buffer in memory with at least NumberOfVKnots() preallocated values.

Returns NumberOfVKnots().

See also
VKnots().

◆ VMultiplicity()

int cadex::ModelData_BSplineSurface::VMultiplicity ( int  theVIndex) const

Returns a V knot multiplicity.

theIndex must be in the range [1, NumberOfVKnots()].

See also
VKnot().

◆ Weight()

double cadex::ModelData_BSplineSurface::Weight ( int  theUIndex,
int  theVIndex 
) const

Returns a weight value.

theUIndex must be in the range [1, NumberOfUPoles()], theVIndex in the range [1, NumberOfVPoles()].

For polynomial B-Spline behavior is undefined.

See also
Pole().

◆ Weights()

int cadex::ModelData_BSplineSurface::Weights ( double  theWeights[]) const

Populates a 2D table of weights.

theWeights must point to a buffer in memory with at least NumberOfUPoles() * NumberOfVPoles() preallocated values.

Returns NumberOfUPoles() * NumberOfVPoles().

For polynomial B-Spline does nothing and returns 0.

See also
Poles().