GeometricObjects CATKnotVector
Usage: you must use this class as is. You should never derive it.
public class CATKnotVector
Class containing all the data necessary to define
a uniform or non uniform, non periodic basis.
PERIODIC NURBS ARE NOT SUPPORTED.
The maximum degree of a NURBS is 15.
A basis is a set of piecewise polynomial functions
(of a given degree), called
basis functions. The pieces are the arcs.
They define the parameter domains between
two distincts successive knot values (global parameters at the
arc extremities). Then, the number of knots is the number of arcs plus 1.
The matching between arc number and Knot vector rank follows the rules ;
(i - IndexOffset)-th Arc starts at Knots(i-1) and ends at Knots(i) ,
There is one polynom per arc for each basis function.
The continuity order between arcs is equal to the degree minus the
multiplicity of the corresponding knot value.
| Multiplicity | Continuity order |
single knot value | 1 | Degree-1 |
internal knot values | 1<=m<=degree |
Degree-m |
extreme knot values for a non periodic basis |
degree+1 (by convention) | (-1) |
same first and last knot values for a periodic basis |
1<=m<=degree | Degree-m |
The number of arcs where
the polynom is not null depends on the knot vector mutiplicities.
Associating each basis
function to a control point (also called vertex),
allows the definition of Nurbs geometric
elements. A basis function represents the influence of one control point.
Note that vertices are not data of the knot vector, but of
the Nurbs polynomial element. Nevertheless, vertex ranks are handled in
methods of this class, because they are equivalent to the polynomial
basis ranks.
A CATKnotVector is a transient object, it can be saved as private data of a
curve or a surface.
A CATKnotVector is defined with:
CATLONG32 | Degree |
The degree of the B-Spline basis functions |
CATBoolean | IsPeriodic |
1 for a periodic basis: the parameter domain is unlimited.
If Delta= LastKnotValue - FirstKnotValue,
the evaluations at Parameter + Delta and Parameter are
the same.
0 otherwise |
CATBoolean | IsUniform |
1 in case of equally spaced knot values.
0 otherwise. |
CATLONG32 | NbOfKnots |
The number of knot values ( =NbOfArcs + 1 |
CATLONG32 | Knots |
The array of the knots values |
CATLONG32 | Multiplicities |
The array of the multiplicity of a knot value |
Sample of a non periodic non uniform knot vector, with C2 continuity:
CATLONG32 | Degree |
3 |
CATBoolean | IsPeriodic |
0 |
CATBoolean | IsUniform |
0 |
CATLONG32 | NbOfKnots |
4 |
CATLONG32 | Knots |
0 , 2 , 8 , 9 |
CATLONG32 | Multiplicities |
4 , 1 , 1 , 4 |
Constructor and Destructor Index
- o
CATKnotVector(CATLONG32)
- Constructs a Bezier CATKnotVector.
- o
CATKnotVector(CATKnotVector&,double,double,CATTolerance&)
- Copy Constructor.
- o
CATKnotVector(CATLONG32&,CATLONG32&,CATLONG32&,double,double,CATLONG32)
- Constructs a uniform CATKnotVector.
- o
CATKnotVector(CATLONG32&,CATLONG32&,CATLONG32&,double*,CATLONG32*,CATLONG32)
- Constructs a non-uniform CATKnotVector.
- o
CATKnotVector(CATLONG32&,CATLONG32&,double*,CATLONG32&,CATLONG32,CATTolerance&)
- Constructs a non-uniform CATKnotVector from a parameter array and
a general continuity order.
- o
CATKnotVector(CATTolerance&,CATError*&,CATLONG32&,CATLONG32&,CATLONG32&,double,double,CATLONG32)
- Constructs a uniform CATKnotVector.
- o
CATKnotVector(CATTolerance&,CATError*&,CATLONG32&,CATLONG32&,CATLONG32&,double*,CATLONG32*,CATLONG32)
- Constructs a non-uniform CATKnotVector.
- o
~CATKnotVector()
- Destructor.
Method Index
- o
ConvertGlobalToLocalParameter(double&,double&,CATLONG32&)
- Retrieves the local parameter and the arc number of
this CATKnotVector global parameter.
- o
ConvertLocalToGlobalParameter(double&,CATLONG32&,double&)
- Retrieves the global parameter associated with a local parameter and an
arc number of this CATKnotVector.
- o
Extrapol(CATLONG32&,double*,CATLONG32*)
- Adds knots at the left or the right of this KnotVector.
- o
FirstVertexForOneArc(CATLONG32&,CATLONG32&)
- Retrieves the first control point which acts on an arc.
- o
GetDegree()
- Returns the degree of the basis defined by this CATKnotVector.
- o
GetIndexOffset()
- Returns the arc index offset.
- o
GetInternalExtremities(CATLONG32,double&,double&)
- Returns the local parameters on the arc iArc.
- o
GetKnotMultiplicity(CATLONG32&)
- Returns the multiplicity of this CATKnotVector knot value.
- o
GetKnots(double*&)
- Returns the pointer to the knot values array of this CATKnotVector.
- o
GetMaxExtremities(CATLONG32&,double&,CATLONG32&,double&)
- Returns the maximum local parameters and arc number of this Knot vector.
- o
GetNumberOfArcs()
- Returns the number of arcs of a nurbs using this CATKnotVector.
- o
GetNumberOfControlPoints()
- Returns the number of necessary control points for a nurbs using this
CATKnotVector.
- o
GetNumberOfKnots()
- Returns the number of distinct knot values of this CATKnotVector.
- o
GetPolynomialBasisForAllArcs()
- Returns the array of pointers on the polynoms defined by this CATKnotVector.
- o
GetPolynomialBasisForOneArc(CATLONG32&)
- Returns the array of pointers on the polynoms defined by this CATKnotVector
involved in one arc.
- o
IsContinuousOnDomain(CATLONG32&,CATLONG32&,CATLONG32&)
- Tests whether a given continuity order of the related basis
is garanteed on a subparameter domain.
- o
IsPeriodic()
- Tests if a CATKnotVector defines a periodic basis.
- o
IsUniform()
- Tests if a CATKnotVector defines a uniform basis.
- o
MoveInExtendedKnotVector(CATLONG32&,CATLONG32&,CATLONG32&)
- Shifts a position into the expanded CATKnotVector.
- o
PolynomialBasisForAllArcs(CATMathPolynomX***)
- Retrieves a bi-dimensional array of pointers on the polynoms defined by
this CATKnotVector.
- o
PolynomialBasisForOneArc(CATLONG32&,CATMathPolynomX**)
- Retrieves an array of pointers on the polynoms defined by this CATKnotVector
involved in one arc.
- o
SearchArcFromParameter(double&)
- Returns the arc number of this CATKnotVector global parameter.
- o
Set(CATKnotVector&,double,double,CATTolerance&)
- Copies a knot vector.
- o
SetDegree(CATLONG32&)
- Modifies the degree.
- o
SetIndexOffset(CATLONG32&)
- Modifies the arc index offset.
- o
SetKnotMultiplicity(CATLONG32&,CATLONG32&)
- Modifies a knot value multiplicity of this CATKnotVector.
- o
SetKnotValue(CATLONG32&,double&,CATTolerance&)
- Modifies a knot value of this CATKnotVector.
- o
SetNonUniformKnotVector(CATLONG32&,CATLONG32&,CATLONG32&,double*,CATLONG32*,CATLONG32)
- Redefines this as a non uniform CATKnotVector.
- o
SetTolerance(CATTolerance&)
-
- o
SetUniformKnotVector(CATLONG32&,CATLONG32&,CATLONG32&,double,double,CATLONG32)
- Redefines this as a uniform CATKnotVector .
- o
operator =(CATKnotVector&)
- Assignment operator.
Data Member Index
- o
_PrivateDoNotUseNotScaled_R18Restricted
-
Constructor and Destructor
o CATKnotVector
public CATKnotVector( | const | iDegree | = 3) |
-
Constructs a Bezier CATKnotVector.
It corresponds to one arc of degree iDegree.
- Parameters:
-
- iDegree
- The degree of the polynomial basis.
o CATKnotVector
public CATKnotVector( | const | iKnotVectorToCopy, |
| | iCoefficient | = 1., |
| | iShift | = 0., |
| const | iTolObject | = CATGetDefaultTolerance()) |
-
Copy Constructor.
A linear transformation of the parameterization can be applied (optional)
New parameter= iCoefficient * Old parameter + iShift,
- Parameters:
-
- iKnotVectorToCopy
- The knot vector to copy.
- iCoefficient
- The coeficient of the transformation.
- iShift
- The shift of the transformation.
- iTolObject
- The set of geometric and mathematical tolerances.
o CATKnotVector
public CATKnotVector( | const | iDegree, |
| const | iIsPeriodic, |
| const | iNbOfArcs, |
| const | iKnotStart | = 0., |
| const | iStep | = 1., |
| const | iIndexOffset | = 0 ) |
-
Constructs a uniform CATKnotVector.
- Parameters:
-
- iDegree
- The degree of the polynomial basis.
- iIsPeriodic
- The periodicity. So far, periodic basis are not supported.
Legal values 0.
- iNbOfArcs
- The number of arcs.
- iKnotStart
- The parameter value of the first knot.
- iStep
- The uniform step value between two knots.
- iIndexOffset
- The index for the first arc.
o CATKnotVector
public CATKnotVector( | const | iDegree, |
| const | iIsPeriodic, |
| const | iNbOfKnots, |
| const | iKnots, |
| const | iMultiplicities, |
| const | iIndexOffset | = 0 ) |
-
Constructs a non-uniform CATKnotVector.
- Parameters:
-
- iDegree
- The degree of the polynomial basis.
- iIsPeriodic
- The periodicity.
Legal values 0.
- iNbOfKnots
- The number of knot values specified for the knot vector. The number of arcs
is iNbOfKnots - 1.
- iKnots
- The array of the global parameter values at the end of each arc.
- iMultiplicities
- The array of the corresponding multiplicities.
- iIndexOffset
- The index for the first arc.
o CATKnotVector
public CATKnotVector( | const | iIsPeriodic, |
| const | iNbOfParameters, |
| const | iParameters, |
| const | iContinuityOrder, |
| const | iIndexOffset | = 0, |
| const | iTolObject | = CATGetDefaultTolerance()) |
-
Constructs a non-uniform CATKnotVector from a parameter array and
a general continuity order.
- Parameters:
-
- iIsPeriodic
- The periodicity.
Legal values0.
- iNbOfParameters
- The number of knot values specified for the knot vector. The number of arcs
is iNbOfParameters - 1.
- iParameters
- The array of the global parameter values at the end of each arc.
- iContinuityOrder
- The global continuity (0,1,2) of the curve. The degree of the polynomial basis
is iContinuityOrder + 1.
- iIndexOffset
- The index for the first arc.
- iTolObject
- The set of geometric and mathematical tolerances.
o CATKnotVector
public CATKnotVector( | const | iTolObject, |
| | oError, |
| const | iDegree, |
| const | iIsPeriodic, |
| const | iNbOfArcs, |
| const | iKnotStart | = 0., |
| const | iStep | = 1., |
| const | iIndexOffset | = 0 ) |
-
Constructs a uniform CATKnotVector.
- Parameters:
-
- iTolObject
- The set of geometric and mathematical tolerances.
- oError
- (output argument) The Error to raise if invalid data given to constructor.
- iDegree
- The degree of the polynomial basis.
- iIsPeriodic
- The periodicity. So far, periodic basis are not supported.
Legal values 0.
- iNbOfArcs
- The number of arcs.
- iKnotStart
- The parameter value of the first knot.
- iStep
- The uniform step value between two knots.
- iIndexOffset
- The index for the first arc.
o CATKnotVector
public CATKnotVector( | const | iTolObject, |
| | oError, |
| const | iDegree, |
| const | iIsPeriodic, |
| const | iNbOfKnots, |
| const | iKnots, |
| const | iMultiplicities, |
| const | iIndexOffset | = 0 ) |
-
Constructs a non-uniform CATKnotVector.
- Parameters:
-
- iTolObject
- The set of geometric and mathematical tolerances.
- oError
- (output argument) The Error to raise if invalid data given to constructor.
- iDegree
- The degree of the polynomial basis.
- iIsPeriodic
- The periodicity.
Legal values 0.
- iNbOfKnots
- The number of knot values specified for the knot vector. The number of arcs
is iNbOfKnots - 1.
- iKnots
- The array of the global parameter values at the end of each arc.
- iMultiplicities
- The array of the corresponding multiplicities.
- iIndexOffset
- The index for the first arc.
o ~CATKnotVector
public virtual ~CATKnotVector( | ) |
-
Destructor.
Methods
o ConvertGlobalToLocalParameter
public virtual ConvertGlobalToLocalParameter( | const | iGlobalParameter, |
| | ioLocalParameter, |
| | ioArcNum) |
-
Retrieves the local parameter and the arc number of
this CATKnotVector global parameter.
- Parameters:
-
- ioLocalParameter
- The local parameter on oArcNum.
- ioArcNum
- The arc number starting at 1.
o ConvertLocalToGlobalParameter
public virtual ConvertLocalToGlobalParameter( | const | iLocalParameter, |
| const | iArcNum, |
| | ioParameter) |
-
Retrieves the global parameter associated with a local parameter and an
arc number of this CATKnotVector.
- Parameters:
-
- iLocalParameter
- The local parameter on iArcNum.
- iArcNum
- The arc number.
- ioGlobalParameter
- The corresponding global parameter.
o Extrapol
public Extrapol( | const | iNbOfParameters, |
| const | iParameters, |
| const | iContinuityOrders | = 0 ) |
-
Adds knots at the left or the right of this KnotVector.
- Parameters:
-
- iNbOfParameters
- The number of knots to add.
- iParameters
- The array of parameters to add. These parameters must be either all strictly lower than the first knot,
or all strictly greater than the last knot.
- iContinuityOrders
- The iContinuityOrders at the additionnal arc limits ( shift of one with the parameters array)
This method returns an error when this is periodic.
o FirstVertexForOneArc
public FirstVertexForOneArc( | const | iArcNum, |
| | oFirstVertexNum) |
-
Retrieves the first control point which acts on an arc.
There is always Degree+1 control points acting on one arc. The
last point to act is then FirstVertexNum+Degree.
For advanced use.
The numbers start at 1.
o GetDegree
-
Returns the degree of the basis defined by this CATKnotVector.
- Returns:
- The degree.
o GetIndexOffset
-
Returns the arc index offset.
- Returns:
- The arc index offset.
o GetInternalExtremities
public GetInternalExtremities( | const | iArc, |
| | ioLocalStart, |
| | ioLocalEnd) |
-
Returns the local parameters on the arc iArc.
- Parameters:
-
- iArc
- The arc number. Begins at CATKnotVector::GetIndexOffset.
- ioLocalStart
- The parameter value at the begining of the arc.
- ioLocalEnd
- The parameter value at the end of the arc.
o GetKnotMultiplicity
public GetKnotMultiplicity( | const | iKnotNum) |
-
Returns the multiplicity of this CATKnotVector knot value.
- Parameters:
-
- iKnotNum
- The knot number ( from 1 to KnotVector.GetNumberOfKnots )
o GetKnots
public GetKnots( | const | oKnots) |
-
Returns the pointer to the knot values array of this CATKnotVector.
- Parameters:
-
- oKnots
- The array of the knots. As part of the knot vector, it is deleted at the knot vector deletion.
o GetMaxExtremities
public GetMaxExtremities( | | ioStartArc, |
| | ioLocalStart, |
| | ioEndArc, |
| | ioLocalEnd) |
-
Returns the maximum local parameters and arc number of this Knot vector.
- Parameters:
-
- ioStartArc
- The start arc.
- ioLocalStart
- The parameter value at the begining of ioStartArc.
- ioEndArc
- The end arc.
- ioLocalEnd
- The parameter value at the end of the arc of ioEndArc.
o GetNumberOfArcs
-
Returns the number of arcs of a nurbs using this CATKnotVector.
- Returns:
- The number of arcs.
o GetNumberOfControlPoints
public GetNumberOfControlPoints( | ) |
-
Returns the number of necessary control points for a nurbs using this
CATKnotVector.
- Returns:
- The number of control points.
o GetNumberOfKnots
public GetNumberOfKnots( | ) |
-
Returns the number of distinct knot values of this CATKnotVector.
- Returns:
- The number of distinct knot values.
o GetPolynomialBasisForAllArcs
public GetPolynomialBasisForAllArcs( | ) |
-
Returns the array of pointers on the polynoms defined by this CATKnotVector.
For advanced use.
The returned array pointer is part of CATKnotVector local data.
This method must be recalled after any non const method applied on the CATKnotvector
The array consists of KnotVector.GetNumberOfArcs *( KnotVector.GetDegree + 1)
pointers on polynoms of degree KnotVector.GetDegree.
These polynoms are reparametrized in [0,Knots[ArcNum]-Knots[ArcNum-1]] where Arcnum
is the current arc number in array.
o GetPolynomialBasisForOneArc
public GetPolynomialBasisForOneArc( | const | iArcNum) |
-
Returns the array of pointers on the polynoms defined by this CATKnotVector
involved in one arc.
For advanced use.
- Parameters:
-
- iArcNum
- The arc number starting at 1.
The returned array pointer is part of CATKnotVector local data.
This method must be recalled after any non const method applied on the CATKnotvector
The array consists of KnotVector.GetDegree + 1
pointers on polynoms of degree KnotVector.GetDegree.
These polynoms are reparametrized in [0,Knots[iArcNum +IndexOffset-1]-Knots[iArcNum +IndexOffset]].
o IsContinuousOnDomain
public IsContinuousOnDomain( | const | iContinuityOrder, |
| const | iStartArcNum, |
| const | iEndArcNum) |
-
Tests whether a given continuity order of the related basis
is garanteed on a subparameter domain.
- Parameters:
-
- iContinuityOrder
- The global continuity (0,1,2) to test.
- iStartArcNum
- The number of the first arc of the domain.
- iEndArcNum
- The number of the last arc of the domain.
- Returns:
- The result of the test.
Legal values: TRUE if the continuity is garanteed, FALSE otherwise.
o IsPeriodic
-
Tests if a CATKnotVector defines a periodic basis.
- Returns:
-
- FALSE
- if the basis is not periodic
- TRUE
- if the basis is periodic (NOT SUPPORTED)
o IsUniform
-
Tests if a CATKnotVector defines a uniform basis.
- Returns:
-
- FALSE
- if the basis is not uniform
- TRUE
- if the basis is uniform
o MoveInExtendedKnotVector
public MoveInExtendedKnotVector( | | ioKnotIndex, |
| | ioKnotRep, |
| const | iMove) |
-
Shifts a position into the expanded CATKnotVector.
For advanced use.
The extented knot vector is the array of knot values as many repeated as
the multiplicity order. The expanded vector of the introduction sample is
the following series:
- expanded knot
- 0, 0, 0, 0, 2, 8, 9, 9, 9, 9
- knot repetition
- 1, 2, 3, 4, 1, 1, 1, 2, 3, 4
- Parameters:
-
- ioKnotIndex
- The index (starting at 0) of the knot value of a CATKnotVector to shift
(resp being shifted).
- ioKnotRep
- The corresponding knot repetition value to shift (resp being shifted).
- iMove
- The shift to operate to the corresponding point into the expanded knot
vector.
CATLONG32 ioKnotIndex = 0, ioKnotRep = 2, iMove = 5;
KnotVector.MoveInExtendedKnotVector(ioKnotIndex,ioKnotRep,iMove)
cout << "new knot index=" << ioKnotIndex << endl;
cout << "corresponding knot repetition=" << ioKnotRep << endl;
gives
new knot index= 3
corresponding knot repetition= 1
o PolynomialBasisForAllArcs
public PolynomialBasisForAllArcs( | | ioPolynom) |
-
Retrieves a bi-dimensional array of pointers on the polynoms defined by
this CATKnotVector.
For advanced use.
- Parameters:
-
- ioPolynom
- The array of KnotVector.GetNumberOfArcs
pointers on array of KnotVector.GetDegree + 1
pointers on polynoms of degree KnotVector.GetDegree.
These polynoms are reparametrized in [0,Knots[ArcNum]-Knots[ArcNum-1]] where Arcnum
is the current arc number in array.
If a pointer is NULL in the array, the polynom is created and you then have to deleted it after use.
o PolynomialBasisForOneArc
public PolynomialBasisForOneArc( | const | iArcNum, |
| | ioPolynom) |
-
Retrieves an array of pointers on the polynoms defined by this CATKnotVector
involved in one arc.
For advanced use.
- Parameters:
-
- iArcNum
- The arc number.
- ioPolynom
- The array of KnotVector.GetDegree + 1
pointers on polynoms of degree KnotVector.GetDegree.
These polynoms are reparametrized in [0,Knots[iArcNum +IndexOffset-1]-Knots[iArcNum +IndexOffset]]
If a pointer is NULL in the array, the polynom is created and you then have to deleted it after use.
o SearchArcFromParameter
public SearchArcFromParameter( | const | iGlobalParameter) |
-
Returns the arc number of this CATKnotVector global parameter.
- Returns:
- The arc numbers start at 1.
o Set
public Set( | const | iKnotVectorToCopy, |
| | iCoefficient | = 1., |
| | iShift | = 0., |
| const | iTolObject | = CATGetDefaultTolerance()) |
-
Copies a knot vector.
Optionally, redefines the parameterization by a linear transformation:
New parameter= iCoefficient * Old parameter + iShift.
- Parameters:
-
- iKnotVectorToCopy
- The knot vector to copy.
- iCoefficient
- The coefficient of the transformation.
- iShift
- The shift of the transformation.
o SetDegree
public SetDegree( | const | iDegree) |
-
Modifies the degree.
- Parameters:
-
- iDegree
- The new degree value. If it is
higher, the continuity order between arcs remains unchanged.
If it is lower, the continuity order between arcs is limited to Degree -1.
o SetIndexOffset
public SetIndexOffset( | const | iOffset) |
-
Modifies the arc index offset.
- Parameters:
-
- iOffset
- The new value of the arc offset.
o SetKnotMultiplicity
public SetKnotMultiplicity( | const | iKnotNum, |
| const | iNewKnotMultiplicity) |
-
Modifies a knot value multiplicity of this CATKnotVector.
- Parameters:
-
- iKnotNum
- The knot number ( from 1 to KnotVector.GetNumberOfKnots ).
- iNewKnotMultiplicity
- The new knot multiplicity.
o SetKnotValue
public SetKnotValue( | const | iKnotNum, |
| const | iNewKnotValue, |
| const | iTolObject | = CATGetDefaultTolerance()) |
-
Modifies a knot value of this CATKnotVector.
- Parameters:
-
- iKnotNum
- The knot number ( from 1 to KnotVector.GetNumberOfKnots )
- iNewKnotValue
- The new knot value.
o SetNonUniformKnotVector
public SetNonUniformKnotVector( | const | iDegree, |
| const | iIsPeriodic, |
| const | iKnotsCount, |
| const | iKnots, |
| const | iMultiplicities, |
| const | iIndexOffset | = 0) |
-
Redefines this as a non uniform CATKnotVector.
- Parameters:
-
- iDegree
- The new degree of the polynomial basis.
- iIsPeriodic
- The new periodicity.
legal values0.
- iKnotsCount
- The new number of knot values specified for the knot vector. The number of arcs
is iKnotsCount - 1.
- iKnots
- The array of the new global parameter values at the end of each arc.
- iMultiplicities
- The array of the new corresponding multiplicities.
- iIndexOffset
- The new index for the first arc.
o SetTolerance
public SetTolerance( | const | iTolObject | =CATGetDefaultTolerance()) |
-
o SetUniformKnotVector
public SetUniformKnotVector( | const | iDegree, |
| const | iIsPeriodic, |
| const | iArcsCount, |
| const | iKnotStart | = 0., |
| const | iStep | = 1., |
| const | iIndexOffset | = 0 ) |
-
Redefines this as a uniform CATKnotVector .
- Parameters:
-
- iDegree
- The new degree of the polynomial basis.
- iIsPeriodic
- The new periodicity.
legal values0.
- iArcsCount
- The new number of arcs.
- iKnotStart
- The new parameter value of the first knot.
- iStep
- The new uniform step value between two knots.
- iIndexOffset
- The new index for the first arc.
o operator =
public operator =( | const | iKnotVectorToAffect) |
-
Assignment operator.
Desallocates and reallocates the left operand, except if it is the
same object as the right operand (iKnotVectorToAffect).
Data Members
o _PrivateDoNotUseNotScaled_R18Restricted
public int _PrivateDoNotUseNotScaled_R18Restricted
-
This object is included in the file: CATKnotVector.h
If needed, your Imakefile.mk should include the module: CATGeometricObjects
Copyright © 1999-2014, Dassault Systèmes. All rights reserved.