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

hull.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  * hull.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/hull.cc,v 1.1 2004/02/02 16:39:11 navaraf Exp $
00040  */
00041 
00042 #include "glimports.h"
00043 #include "myassert.h"
00044 #include "mystdio.h"
00045 #include "hull.h"
00046 #include "gridvertex.h"
00047 #include "gridtrimvertex.h"
00048 #include "gridline.h"
00049 #include "trimline.h"
00050 #include "uarray.h"
00051 #include "trimregion.h"
00052 
00053 Hull::Hull( void )
00054 {}
00055 
00056 Hull::~Hull( void )
00057 {}
00058 
00059 /*----------------------------------------------------------------------
00060  * Hull:init - this routine does the initialization needed before any
00061  *      calls to nextupper or nextlower can be made.
00062  *----------------------------------------------------------------------
00063  */
00064 void
00065 Hull::init( void )
00066 {
00067     TrimVertex *lfirst = left.first();
00068     TrimVertex *llast = left.last();
00069     if( lfirst->param[0] <= llast->param[0] ) {
00070     fakeleft.init( left.first() );
00071     upper.left = &fakeleft;
00072     lower.left = &left;
00073     } else {
00074     fakeleft.init( left.last() );
00075     lower.left = &fakeleft;
00076     upper.left = &left;
00077     }
00078     upper.left->last();
00079     lower.left->first();
00080 
00081     if( top.ustart <= top.uend ) {
00082     upper.line = &top;
00083     upper.index = top.ustart;
00084     } else
00085     upper.line = 0;
00086 
00087     if( bot.ustart <= bot.uend ) {
00088     lower.line = &bot;
00089     lower.index = bot.ustart;
00090     } else
00091     lower.line = 0;
00092 
00093     TrimVertex *rfirst = right.first();
00094     TrimVertex *rlast = right.last();
00095     if( rfirst->param[0] <= rlast->param[0] ) {
00096     fakeright.init( right.last() );
00097     lower.right = &fakeright;
00098     upper.right = &right;
00099     } else {
00100     fakeright.init( right.first() );
00101     upper.right = &fakeright;
00102     lower.right = &right;
00103     }
00104     upper.right->first();
00105     lower.right->last();
00106 }
00107 
00108 /*----------------------------------------------------------------------
00109  * nextupper - find next vertex on upper hull of trim region.
00110  *       - if vertex is on trim curve, set vtop point to 
00111  *         that vertex.  if vertex is on grid, set vtop to
00112  *         point to temporary area and stuff coordinants into
00113  *         temporary vertex.  Also, place grid coords in temporary
00114  *         grid vertex.
00115  *----------------------------------------------------------------------
00116  */
00117 GridTrimVertex *
00118 Hull::nextupper( GridTrimVertex *gv )
00119 {
00120     if( upper.left ) {
00121     gv->set( upper.left->prev() );
00122     if( gv->isTrimVert() ) return gv;
00123     upper.left = 0;
00124     } 
00125 
00126     if( upper.line ) {
00127     assert( upper.index <= upper.line->uend );
00128     gv->set( uarray.uarray[upper.index], upper.line->vval );
00129     gv->set( upper.index, upper.line->vindex );
00130     if( upper.index++ == upper.line->uend ) upper.line = 0;
00131     return gv; 
00132     } 
00133 
00134     if( upper.right ) {
00135     gv->set( upper.right->next() );
00136     if( gv->isTrimVert() ) return gv;
00137     upper.right = 0;
00138     } 
00139 
00140     return 0; 
00141 }
00142 
00143 GridTrimVertex *
00144 Hull::nextlower( register GridTrimVertex *gv )
00145 {
00146     if( lower.left ) {
00147     gv->set( lower.left->next() );
00148     if( gv->isTrimVert() ) return gv;
00149     lower.left = 0;
00150     } 
00151 
00152     if( lower.line ) {
00153     gv->set( uarray.uarray[lower.index], lower.line->vval );
00154     gv->set( lower.index, lower.line->vindex );
00155     if( lower.index++ == lower.line->uend ) lower.line = 0;
00156     return gv;
00157     } 
00158 
00159     if( lower.right ) {
00160     gv->set( lower.right->prev() );
00161     if( gv->isTrimVert() ) return gv;
00162     lower.right = 0;
00163     } 
00164 
00165     return 0;
00166 }
00167 

Generated on Thu May 24 2012 04:24:05 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.