ReactOS  0.4.15-dev-1206-g731eddf
Knotvector Struct Reference

#include <knotvector.h>

Public Member Functions

 Knotvector (void)
 
 ~Knotvector (void)
 
void init (long, long, long, INREAL *)
 
int validate (void)
 
void show (const char *)
 

Public Attributes

long order
 
long knotcount
 
long stride
 
Knotknotlist
 

Detailed Description

Definition at line 41 of file knotvector.h.

Constructor & Destructor Documentation

◆ Knotvector()

Knotvector::Knotvector ( void  )

Definition at line 62 of file knotvector.cc.

63 {
64  knotcount = 0;
65  stride = 0;
66  order = 0;
67  knotlist = 0;
68 }
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Knot * knotlist
Definition: knotvector.h:51
GLsizei stride
Definition: glext.h:5848
long knotcount
Definition: knotvector.h:49

◆ ~Knotvector()

Knotvector::~Knotvector ( void  )

Definition at line 70 of file knotvector.cc.

71 {
72  if( knotlist ) delete[] knotlist;
73 }
Knot * knotlist
Definition: knotvector.h:51

Member Function Documentation

◆ init()

void Knotvector::init ( long  _knotcount,
long  _stride,
long  _order,
INREAL _knotlist 
)

Definition at line 50 of file knotvector.cc.

51 {
52  knotcount = _knotcount;
53  stride = _stride;
54  order = _order;
55  knotlist = new Knot[_knotcount];
56  assert( knotlist != 0 );
57 
58  for( int i = 0; i != _knotcount; i++ )
59  knotlist[i] = (Knot) _knotlist[i];
60 }
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Knot * knotlist
Definition: knotvector.h:51
REAL Knot
Definition: types.h:45
#define assert(x)
Definition: debug.h:53
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei stride
Definition: glext.h:5848
long knotcount
Definition: knotvector.h:49

Referenced by NurbsTessellator::nurbscurve(), and NurbsTessellator::nurbssurface().

◆ show()

void Knotvector::show ( const char msg)

Definition at line 132 of file knotvector.cc.

133 {
134 #ifndef NDEBUG
135  _glu_dprintf( "%s\n", msg );
136  _glu_dprintf( "order = %ld, count = %ld\n", order, knotcount );
137 
138  for( int i=0; i<knotcount; i++ )
139  _glu_dprintf( "knot[%d] = %g\n", i, knotlist[i] );
140 #endif
141 }
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Knot * knotlist
Definition: knotvector.h:51
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
long knotcount
Definition: knotvector.h:49
#define msg(x)
Definition: auth_time.c:54

Referenced by NurbsTessellator::do_check_knots().

◆ validate()

int Knotvector::validate ( void  )

Definition at line 75 of file knotvector.cc.

76 {
77  /* kindex is used as an array index so subtract one first,
78  * this propagates throughout the code so study carefully */
79  long kindex = knotcount-1;
80 
82  // spline order un-supported
83  return( 1 );
84  }
85 
86  if( knotcount < (2 * order) ) {
87  // too few knots
88  return( 2 );
89  }
90 
91  if( identical( knotlist[kindex-(order-1)], knotlist[order-1]) ) {
92  // valid knot range is empty
93  return( 3 );
94  }
95 
96  for( long i = 0; i < kindex; i++)
97  if( knotlist[i] > knotlist[i+1] ) {
98  // decreasing knot sequence
99  return( 4 );
100  }
101 
102  /* check for valid multiplicity */
103 
104  /* kindex is currently the index of the last knot.
105  * In the next loop it is decremented to ignore the last knot
106  * and the loop stops when kindex is 2 so as to ignore the first
107  * knot as well. These knots are not used in computing
108  * knot multiplicities.
109  */
110 
111  long multi = 1;
112  for( ; kindex >= 1; kindex-- ) {
113  if( knotlist[kindex] - knotlist[kindex-1] < TOLERANCE ) {
114  multi++;
115  continue;
116  }
117  if ( multi > order ) {
118  // knot multiplicity greater than order of spline
119  return( 5 );
120  }
121  multi = 1;
122  }
123 
124  if ( multi > order ) {
125  // knot multiplicity greater than order of spline
126  return( 5 );
127  }
128 
129  return 0;
130 }
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Knot * knotlist
Definition: knotvector.h:51
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MAXORDER
Definition: defines.h:45
int identical(Knot x, Knot y)
Definition: knotvector.h:58
#define TOLERANCE
Definition: bezierEval.cc:48
long knotcount
Definition: knotvector.h:49

Referenced by NurbsTessellator::do_check_knots().

Member Data Documentation

◆ knotcount

long Knotvector::knotcount

Definition at line 49 of file knotvector.h.

Referenced by init(), Knotvector(), Splinespec::kspecinit(), show(), and validate().

◆ knotlist

Knot* Knotvector::knotlist

Definition at line 51 of file knotvector.h.

Referenced by init(), Knotvector(), Splinespec::kspecinit(), show(), validate(), and ~Knotvector().

◆ order

long Knotvector::order

Definition at line 48 of file knotvector.h.

Referenced by Splinespec::kspecinit().

◆ stride

long Knotvector::stride

Definition at line 50 of file knotvector.h.

Referenced by Splinespec::kspecinit().


The documentation for this struct was generated from the following files: