29 #ifndef BSPLINE_DATA_INCLUDED
30 #define BSPLINE_DATA_INCLUDED
33 #include "PPolynomial.h"
36 template<
int Degree >
42 int& operator[](
unsigned int idx ){
if (idx <= Degree)
return coeffs[idx];
return coeffs[0];}
43 const int& operator[](
unsigned int idx )
const {
if (idx <= Degree)
return coeffs[idx];
return coeffs[0];}
45 template<
int Degree >
46 struct BSplineElements :
public std::vector< BSplineElementCoefficients< Degree > >
48 static const int _off = (Degree+1)/2;
49 void _addLeft (
int offset ,
int boundary );
50 void _addRight(
int offset ,
int boundary );
62 BSplineElements(
int res ,
int offset ,
int boundary=NONE ,
int inset=0 );
67 void print( FILE* fp=stdout )
const
69 for(
int i=0 ; i< this->size() ; i++ )
72 for(
int j=0 ; j<=Degree ; j++ ) printf(
" %d" , (*
this)[i][j] );
73 printf(
" (%d)\n" , denominator );
78 template<
int Degree ,
class Real >
89 void printnl(
void )
const {
for(
int d=0 ; d<=Degree ; d++ ) polys[d].printnl(); }
93 const static int VV_DOT_FLAG = 1;
94 const static int DV_DOT_FLAG = 2;
95 const static int DD_DOT_FLAG = 4;
96 const static int VALUE_FLAG = 1;
97 const static int D_VALUE_FLAG = 2;
99 int depth , functionCount , sampleCount;
100 Pointer( Real ) vvDotTable;
101 Pointer( Real ) dvDotTable;
102 Pointer( Real ) ddDotTable;
103 Pointer( Real ) valueTables;
104 Pointer( Real ) dValueTables;
105 PPolynomial< Degree > baseFunction , leftBaseFunction , rightBaseFunction , leftRightBaseFunction;
106 PPolynomial< Degree-1 > dBaseFunction , dLeftBaseFunction , dRightBaseFunction , dLeftRightBaseFunction;
114 virtual
void setDotTables(
int flags ,
bool inset=false );
115 virtual
void clearDotTables(
int flags );
117 virtual
void setValueTables(
int flags ,
double smooth=0 );
118 virtual
void setValueTables(
int flags ,
double valueSmooth ,
double normalSmooth );
119 virtual
void clearValueTables(
void );
121 void setSampleSpan(
int idx ,
int& start ,
int& end ,
double smooth=0 ) const;
132 void set(
int maxDepth ,
bool useDotRatios=true ,
int boundaryType=
BSplineElements< Degree >::NONE );
134 inline
int Index(
int i1 ,
int i2 ) const;
135 static inline
int SymmetricIndex(
int i1 ,
int i2 );
136 static inline
int SymmetricIndex(
int i1 ,
int i2 ,
int& index );
139 template<
int Degree1 ,
int Degree2 >
void SetBSplineElementIntegrals(
double integrals[Degree1+1][Degree2+1] );
141 #include "BSplineData.inl"
142 #endif // BSPLINE_DATA_INCLUDED