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

varray.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  * varray.c++
00037  *
00038  * $Date: 2006-03-12 00:07:02 +0000 (Sun, 12 Mar 2006) $ $Revision: 1.1 $
00039  * $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/internals/varray.cc,v 1.1 2004/02/02 16:39:13 navaraf Exp $
00040  */
00041 
00042 #include "glimports.h"
00043 #include "myassert.h"
00044 #include "mystdio.h"
00045 #include "varray.h"
00046 #include "arc.h"
00047 #include "simplemath.h"         // glu_abs()
00048 
00049 #define TINY 0.0001
00050 inline long sgn( REAL x ) 
00051 {
00052     return (x < -TINY) ? -1 :  ((x > TINY) ? 1 : 0 );
00053 }
00054 
00055 
00056 Varray::Varray( void )
00057 {
00058     varray = 0;
00059     size = 0;
00060 }
00061 
00062 Varray::~Varray( void )
00063 {
00064     if( varray ) delete[] varray; 
00065 }
00066 
00067 inline void
00068 Varray::update( Arc_ptr arc, long dir[2], REAL val )
00069 {
00070     register long ds = sgn(arc->tail()[0] - arc->prev->tail()[0]);
00071     register long dt = sgn(arc->tail()[1] - arc->prev->tail()[1]);
00072 
00073     if( dir[0] != ds || dir[1] != dt ) {
00074     dir[0] = ds;
00075     dir[1] = dt;
00076     append( val );
00077     }
00078 }
00079 
00080 void
00081 Varray::grow( long guess )
00082 {
00083     if( size < guess ) {
00084     size = guess * 2;
00085     if( varray ) delete[] varray; 
00086     varray = new REAL[size];
00087     assert( varray != 0 );
00088     }
00089 }
00090 
00091 long
00092 Varray::init( REAL delta, Arc_ptr toparc, Arc_ptr botarc )
00093 {
00094     Arc_ptr left = toparc->next;
00095     Arc_ptr right = toparc;
00096     long ldir[2], rdir[2];
00097     
00098     ldir[0] = sgn( left->tail()[0] - left->prev->tail()[0] );
00099     ldir[1] = sgn( left->tail()[1] - left->prev->tail()[1] );
00100     rdir[0] = sgn( right->tail()[0] - right->prev->tail()[0] );
00101     rdir[1] = sgn( right->tail()[1] - right->prev->tail()[1] );
00102 
00103     vval[0] = toparc->tail()[1];
00104     numquads = 0;
00105 
00106     while( 1 ) {
00107     switch( sgn( left->tail()[1] - right->prev->tail()[1] ) ) {
00108     case 1:
00109         left = left->next;
00110         update( left, ldir, left->prev->tail()[1] );
00111         break;
00112     case -1: 
00113         right = right->prev;
00114         update( right, rdir, right->tail()[1] );
00115         break;
00116     case 0:
00117         if( glu_abs(left->tail()[1] - botarc->tail()[1]) < TINY) goto end;
00118             if( glu_abs(left->tail()[0]-right->prev->tail()[0]) < TINY &&
00119                 glu_abs(left->tail()[1]-right->prev->tail()[1]) < TINY) goto end;
00120         left = left->next;
00121         break;
00122     }
00123     }
00124 
00125 end:
00126     append( botarc->tail()[1] );
00127 
00128     grow( ((long) ((vval[0] - vval[numquads])/delta)) + numquads + 2 );
00129 
00130     long i, index = 0;
00131     for( i=0; i<numquads; i++ ) {
00132     voffset[i] = index;
00133         varray[index++] = vval[i];
00134     REAL dist = vval[i] - vval[i+1];
00135     if( dist > delta ) {
00136         long steps = ((long) (dist/delta)) +1;
00137         float deltav = - dist / (REAL) steps;
00138         for( long j=1; j<steps; j++ ) 
00139         varray[index++] = vval[i] + j * deltav; 
00140     }
00141     }
00142     voffset[i] = index;
00143     varray[index] = vval[i];
00144     return index;
00145 }
00146 

Generated on Sat May 26 2012 04:22:18 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.