#include<kfbxnurbscurve.h>
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
| |
enum | EType |
The form of the curve
| |
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. | |
virtualKFbxObject* | Clone(KFbxObject*pContainer,KFbxObject::ECloneTypepCloneType=eDEEP_CLONE) const |
Creates a clone of this object. | |
Protected Member Functions | |
KFbxNurbsCurve& | operator=(KFbxNurbsCurveconst&pNurb) |
Assignment operator. |
enumEDimension |
The dimension of the CVs
Definition at line97of filekfbxnurbscurve.h.
enumEType |
enumEError |
Error identifiers.
Reimplemented fromKFbxGeometry.
Definition at line215of filekfbxnurbscurve.h.
virtualKFbxNodeAttribute::EAttributeTypeGetAttributeType | ( | ) | const[virtual] |
void InitControlPoints | ( | int | pCount, | |
EType | pVType | |||
) |
Allocate memory space for the array of control points as well as the knot vector.
pCount | Number of control points. | |
pVType | Nurb type in V direction. |
double* GetKnotVector | ( | ) | const[inline] |
int GetKnotCount | ( | ) | const |
Get the number of elements in the knot vector.
int GetOrder | ( | ) | const[inline] |
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.
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.
Definition at line154of filekfbxnurbscurve.h.
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.
S = N + M + 1;
In this calculation N includes the duplicate CVs for closed and periodic curves.
ETypeGetType | ( | ) | const[inline] |
bool IsPolyline | ( | ) | const[inline] |
Checks if the curve is a poly line.
(A polyline is a linear nurbs curve )
true
if 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.
true
if curve is a Bezier curve, false otherwise.virtualKFbxObject* Clone | ( | KFbxObject* | pContainer, | |
KFbxObject::ECloneType | pCloneType=eDEEP_CLONE | |||
) | const[virtual] |
Creates a clone of this object.
pContainer | The object, typically a document or scene, that will contain the new clone. Can be NULL. | |
pCloneType | The type of clone to create |
Reimplemented fromKFbxGeometry.
KFbxNurbsCurve&operator= | ( | KFbxNurbsCurveconst& | pNurb | ) | [protected] |
Assignment operator.
pNurb | KFbxNurbsCurveobject assigned to this one. |