KFbxNurbsCurve
#include<kfbxnurbscurve.h>

Inheritance diagram for KFbxNurbsCurve:

Inheritance graph
[legend]

List of all members.

Detailed Description

A Non-Uniform Rational B-Spline (Nurbs) curve is a type of parametric geometry.

A Nurbs curve is defined by the degree, form, knot vector and control points.

Let M be the degree of the curve. Let N be the number of control points of the curve.

The form of the curve can be open, closed or periodic. A curve with end points that do not meet is defined as an open curve. The number of knots in an open curve is defined as N+(M+1).

A closed curve simply has its last control point equal to its first control point. Note that this does not imply tangent continuity at the end point. The curve may have a kink at this point. In FBX the last control point is not specified by the user in theInitControlPoints()method. For example, if there are to be 10 control points in total, and the curve is to be closed, than only 9 control points need to be passed into theInitControlPoints()method. The last control point is implied to be equal to the first control point. Thus N represents the number of unique CVs.

A periodic curve has its last M control points equal to its first M control points. A periodic curve is tangent continuous at the ends. Similiar to a closed curve, when creating a periodic curve, only the unique control points need to be set. For example a periodic curve of degree 3 with 10 control points requires only 7 CVs to be specified in theInitControlPoints()method. The last 3 CVs, which are the same as the first 3, are not included.

The calculation of the number of knots in closed and periodic curves is more complex. Since we have excluded one CV in N in a closed curve, the number of knots is N+(M+1)+1. Similiarly, we excluded M CVs in periodic curves so the number of knots is N+(M+1)+M.

Note that FBX stores one extra knot at the beginning and and end of the knot vector, compared to some other graphics applications such as Maya. The two knots are not used in calculation, but they are included so that no data is lost when converting from file formats that do store the extra knots.

Definition at line86of filekfbxnurbscurve.h.


Public Types

enum EDimension
 The dimension of the CVs
  • e2DThe CVs are two dimensional points
  • e3DThe CVs are three dimensional points.
More...
enum EType
 The form of the curve
  • eOPEN
  • eCLOSED
  • ePERIODIC.
More...
enum EError
 Error identifiers.More...

Public Member Functions

virtual
KFbxNodeAttribute::EAttributeType 
GetAttributeType() const
 Return the type of node attribute.
void InitControlPoints(int pCount,ETypepVType)
 Allocate memory space for the array of control points as well as the knot vector.
double * GetKnotVector() const
 Get knot vector.
int GetKnotCount() const
 Get the number of elements in the knot vector.
int GetOrder() const
 Get nurb curve order.
void SetDimension(EDimensionpDimension)
 Sets the dimension of the CVs For 3D curves: control point = ( x, y, z, w ), where w is the weight For 2D curves: control point = ( x, y, 0, w ), where the z component is unused, and w is the weight.
EDimension GetDimension() const
 Gets the dimension of the control points.
bool IsRational()
 Determines if the curve is rational or not.
int GetSpanCount()
 Calculates the number of spans in the curve using the following: Where S = Number of spans N = Number of CVs M = Order of the curve.
EType GetType() const
 Get nurb type.
bool IsPolyline() const
 Checks if the curve is a poly line.
bool IsBezier()
 Bezier curves are a special case of nurbs curve.
virtualKFbxObjectClone(KFbxObject*pContainer,KFbxObject::ECloneTypepCloneType=eDEEP_CLONE) const
 Creates a clone of this object.

Protected Member Functions

KFbxNurbsCurveoperator=(KFbxNurbsCurveconst&pNurb)
 Assignment operator.

Member Enumeration Documentation

The dimension of the CVs

  • e2DThe CVs are two dimensional points
  • e3DThe CVs are three dimensional points.

Definition at line97of filekfbxnurbscurve.h.

enumEType

The form of the curve

  • eOPEN
  • eCLOSED
  • ePERIODIC.

Definition at line109of filekfbxnurbscurve.h.

enumEError

Error identifiers.

  • eINDEX_OUT_OF_RANGE
  • eNULL_PARAMETER
  • eMATERIAL_NOT_FOUND
  • eMATERIAL_ALREADY_ADDED
  • eTEXTURE_NOT_FOUND
  • eTEXTURE_ALREADY_ADDED
  • eSHAPE_ALREADY_ADDED
  • eSHAPE_INVALID_NAME
  • eSHAPE_NAME_CLASH
  • eSHAPE_NO_CURVE_FOUND
  • eUNKNOWN_ERROR

Reimplemented fromKFbxGeometry.

Definition at line215of filekfbxnurbscurve.h.

Member Function Documentation

virtualKFbxNodeAttribute::EAttributeTypeGetAttributeType( ) const[virtual]

Return the type of node attribute.

This class is pure virtual.

Reimplemented fromKFbxGeometry.

void InitControlPoints(int pCount,
EType pVType 
)

Allocate memory space for the array of control points as well as the knot vector.

Parameters:
pCount Number of control points.
pVType Nurb type in V direction.
Remarks:
This function should always be called afterKFbxNurb::SetOrder().

double* GetKnotVector( ) const[inline]

Get knot vector.

Returns:
Pointer to the array of knots.

Definition at line128of filekfbxnurbscurve.h.

int GetKnotCount( ) const

Get the number of elements in the knot vector.

Returns:
The number of knots. SeeKFbxNurbsCurvedescription for more details.

int GetOrder( ) const[inline]

Get nurb curve order.

Returns:
Order value.

Definition at line142of filekfbxnurbscurve.h.

void SetDimension(EDimension pDimension ) [inline]

Sets the dimension of the CVs For 3D curves: control point = ( x, y, z, w ), where w is the weight For 2D curves: control point = ( x, y, 0, w ), where the z component is unused, and w is the weight.

Parameters:
pDimension - the dimension of the control points. (3d or 2d)

Definition at line149of filekfbxnurbscurve.h.

EDimensionGetDimension( ) const[inline]

Gets the dimension of the control points.

Returns:
The dimension of the curve

Definition at line154of filekfbxnurbscurve.h.

bool IsRational( ) 

Determines if the curve is rational or not.

Returns:
True if the curve is rational, false otherwise

int GetSpanCount( ) 

Calculates the number of spans in the curve using the following: Where S = Number of spans N = Number of CVs M = Order of the curve.

S = N + M + 1;

In this calculation N includes the duplicate CVs for closed and periodic curves.

Returns:
The number of spans if the curve has been initialized, -1 otherwise.

ETypeGetType( ) const[inline]

Get nurb type.

Returns:
Nurb curve type identifier.

Definition at line180of filekfbxnurbscurve.h.

bool IsPolyline( ) const[inline]

Checks if the curve is a poly line.

(A polyline is a linear nurbs curve )

Returns:
trueif curve is a poly line, false otherwise.

Definition at line187of filekfbxnurbscurve.h.

bool IsBezier( ) 

Bezier curves are a special case of nurbs curve.

This function determines if this nurbs curve is a Bezier curve.

Returns:
trueif curve is a Bezier curve, false otherwise.

virtualKFbxObject* Clone(KFbxObjectpContainer,
KFbxObject::ECloneType pCloneType=eDEEP_CLONE 
)const[virtual]

Creates a clone of this object.

Parameters:
pContainer The object, typically a document or scene, that will contain the new clone. Can be NULL.
pCloneType The type of clone to create
Returns:
The new clone, or NULL if the specified clone type is not supported.

Reimplemented fromKFbxGeometry.

KFbxNurbsCurve&operator=(KFbxNurbsCurveconst& pNurb ) [protected]

Assignment operator.

Parameters:
pNurb KFbxNurbsCurveobject assigned to this one.