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.
MultiplicityContinuity order
single knot value1Degree-1
internal knot values1<=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<=degreeDegree-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
public GetDegree()
Returns the degree of the basis defined by this CATKnotVector.
Returns:
The degree.
o GetIndexOffset
public 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
public 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
public 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
public 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.