ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

knotvector.cc
Go to the documentation of this file.
00001 /*
00002 ** License Applicability. Except to the extent portions of this file are
00003 ** made subject to an alternative license as permitted in the SGI Free
00004 ** Software License B, Version 1.1 (the "License"), the contents of this
00005 ** file are subject only to the provisions of the License. You may not use
00006 ** this file except in compliance with the License. You may obtain a copy
00007 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
00008 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
00009 **
00010 ** http://oss.sgi.com/projects/FreeB
00011 **
00012 ** Note that, as provided in the License, the Software is distributed on an
00013 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
00014 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
00015 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
00016 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
00017 **
00018 ** Original Code. The Original Code is: OpenGL Sample Implementation,
00019 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
00020 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
00021 ** Copyright in any portions created by third parties is as indicated
00022 ** elsewhere herein. All Rights Reserved.
00023 **
00024 ** Additional Notice Provisions: The application programming interfaces
00025 ** established by SGI in conjunction with the Original Code are The
00026 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
00027 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
00028 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
00029 ** Window System(R) (Version 1.3), released October 19, 1998. This software
00030 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
00031 ** published by SGI, but has not been independently verified as being
00032 ** compliant with the OpenGL(R) version 1.2.1 Specification.
00033 */
00034 
00035 /*
00036  * knotvector.c++
00037  *
00038  */
00039 
00040 #include "glimports.h"
00041 #include "mystdio.h"
00042 #include "myassert.h"
00043 #include "knotvector.h"
00044 #include "defines.h"
00045 
00046 #ifdef __WATCOMC__
00047 #pragma warning 726 10
00048 #endif
00049 
00050 void Knotvector::init( long _knotcount, long _stride, long _order, INREAL *_knotlist )
00051 {
00052     knotcount = _knotcount;
00053     stride = _stride;
00054     order = _order;
00055     knotlist = new Knot[_knotcount];
00056     assert( knotlist != 0 );
00057 
00058     for( int i = 0; i != _knotcount; i++ )
00059     knotlist[i] = (Knot) _knotlist[i];
00060 }
00061 
00062 Knotvector::Knotvector( void )
00063 {
00064     knotlist = 0;
00065 }
00066 
00067 Knotvector::~Knotvector( void )
00068 {
00069     if( knotlist ) delete[] knotlist;
00070 }
00071 
00072 int Knotvector::validate( void )
00073 {
00074    /* kindex is used as an array index so subtract one first,
00075      * this propagates throughout the code so study carefully */
00076     long    kindex = knotcount-1;
00077 
00078     if( order < 1 || order > MAXORDER ) {
00079     // spline order un-supported
00080     return( 1 );
00081     }
00082 
00083     if( knotcount < (2 * order) ) {
00084     // too few knots
00085     return( 2 );
00086     }
00087 
00088     if( identical( knotlist[kindex-(order-1)], knotlist[order-1]) ) {
00089     // valid knot range is empty
00090     return( 3 );
00091     }
00092 
00093     for( long i = 0; i < kindex; i++)
00094     if( knotlist[i] > knotlist[i+1] ) {
00095         // decreasing knot sequence
00096         return( 4 );
00097     }
00098         
00099     /* check for valid multiplicity */
00100 
00101     /*  kindex is currently the index of the last knot.
00102      *  In the next loop  it is decremented to ignore the last knot
00103      *  and the loop stops when kindex  is 2 so as to ignore the first
00104      *  knot as well.  These knots are not used in computing
00105      *  knot multiplicities.
00106      */
00107 
00108     long multi = 1;
00109     for( ; kindex >= 1; kindex-- ) {
00110     if( knotlist[kindex] - knotlist[kindex-1] < TOLERANCE ) {
00111         multi++;
00112         continue;
00113     }
00114     if ( multi > order ) {
00115         // knot multiplicity greater than order of spline
00116         return( 5 );
00117     }
00118     multi = 1;
00119     }
00120 
00121     if ( multi > order ) {
00122     // knot multiplicity greater than order of spline
00123     return( 5 );
00124     }
00125 
00126     return 0;
00127 }
00128 
00129 void Knotvector::show( const char *msg )
00130 {
00131 #ifndef NDEBUG
00132     dprintf( "%s\n", msg );
00133     dprintf( "order = %ld, count = %ld\n", order, knotcount );
00134 
00135     for( int i=0; i<knotcount; i++ )
00136     dprintf( "knot[%d] = %g\n", i, knotlist[i] );
00137 #endif
00138 }
00139 

Generated on Mon May 28 2012 04:23:31 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.