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

arcsorter.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  * arcsorter.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/arcsorter.cc,v 1.1 2004/02/02 16:39:10 navaraf Exp $
00040  */
00041 
00042 #ifndef __gluarcsorter_c_
00043 #define __gluarcsorter_c_
00044 
00045 #include "glimports.h"
00046 #include "arc.h"
00047 #include "arcsorter.h"
00048 #include "subdivider.h"
00049 
00050 ArcSorter::ArcSorter(Subdivider &s) : Sorter( sizeof( Arc ** ) ), subdivider(s)
00051 {
00052 }
00053 
00054 int
00055 ArcSorter::qscmp( char *, char * )
00056 {
00057     dprintf( "ArcSorter::qscmp: pure virtual called\n" );
00058     return 0;
00059 }
00060 
00061 void
00062 ArcSorter::qsort( Arc **a, int n )
00063 {
00064     Sorter::qsort( (void *) a, n );
00065 }
00066 
00067 void        
00068 ArcSorter::qsexc( char *i, char *j )// i<-j, j<-i 
00069 {
00070     Arc **jarc1 = (Arc **) i;
00071     Arc **jarc2 = (Arc **) j;
00072     Arc *tmp = *jarc1;
00073     *jarc1 = *jarc2;
00074     *jarc2 = tmp;
00075 }   
00076 
00077 void        
00078 ArcSorter::qstexc( char *i, char *j, char *k )// i<-k, k<-j, j<-i
00079 {
00080     Arc **jarc1 = (Arc **) i;
00081     Arc **jarc2 = (Arc **) j;
00082     Arc **jarc3 = (Arc **) k;
00083     Arc *tmp = *jarc1;
00084     *jarc1 = *jarc3;
00085     *jarc3 = *jarc2;
00086     *jarc2 = tmp;
00087 }
00088   
00089 
00090 ArcSdirSorter::ArcSdirSorter( Subdivider &s ) : ArcSorter(s)
00091 {
00092 }
00093 
00094 int
00095 ArcSdirSorter::qscmp( char *i, char *j )
00096 {
00097     Arc *jarc1 = *(Arc **) i;
00098     Arc *jarc2 = *(Arc **) j;
00099 
00100     int v1 = (jarc1->getitail() ? 0 : (jarc1->pwlArc->npts - 1));
00101     int v2 = (jarc2->getitail() ? 0 : (jarc2->pwlArc->npts - 1));
00102 
00103     REAL diff =  jarc1->pwlArc->pts[v1].param[1] -
00104              jarc2->pwlArc->pts[v2].param[1];
00105 
00106     if( diff < 0.0)
00107     return -1;
00108     else if( diff > 0.0)
00109     return 1;
00110     else {
00111     if( v1 == 0 ) {
00112         if( jarc2->tail()[0] < jarc1->tail()[0] ) {
00113             return subdivider.ccwTurn_sl( jarc2, jarc1 ) ? 1 : -1;
00114         } else {
00115             return subdivider.ccwTurn_sr( jarc2, jarc1 ) ? -1 : 1;
00116         }
00117     } else {
00118         if( jarc2->head()[0] < jarc1->head()[0] ) {
00119             return subdivider.ccwTurn_sl( jarc1, jarc2 ) ? -1 : 1;
00120         } else {
00121             return subdivider.ccwTurn_sr( jarc1, jarc2 ) ? 1 : -1;
00122         }
00123     }
00124     }    
00125 }
00126 
00127 ArcTdirSorter::ArcTdirSorter( Subdivider &s ) : ArcSorter(s)
00128 {
00129 }
00130 
00131 /*----------------------------------------------------------------------------
00132  * ArcTdirSorter::qscmp - 
00133   *        compare two axis monotone arcs that are incident 
00134  *         to the line T == compare_value. Determine which of the
00135  *         two intersects that line with a LESSER S value.  If
00136  *         jarc1 does, return 1.  If jarc2 does, return -1. 
00137  *----------------------------------------------------------------------------
00138  */
00139 int
00140 ArcTdirSorter::qscmp( char *i, char *j )
00141 {
00142     Arc *jarc1 = *(Arc **) i;
00143     Arc *jarc2 = *(Arc **) j;
00144 
00145     int v1 = (jarc1->getitail() ? 0 : (jarc1->pwlArc->npts - 1));
00146     int v2 = (jarc2->getitail() ? 0 : (jarc2->pwlArc->npts - 1));
00147 
00148     REAL diff =  jarc1->pwlArc->pts[v1].param[0] -
00149              jarc2->pwlArc->pts[v2].param[0];
00150  
00151     if( diff < 0.0)
00152     return 1;
00153     else if( diff > 0.0)
00154     return -1;
00155     else {
00156     if( v1 == 0 ) {
00157         if (jarc2->tail()[1] < jarc1->tail()[1]) {
00158             return subdivider.ccwTurn_tl( jarc2, jarc1 ) ? 1 : -1;
00159         } else {
00160             return subdivider.ccwTurn_tr( jarc2, jarc1 ) ? -1 : 1;
00161         }
00162     } else {
00163         if( jarc2->head()[1] < jarc1->head()[1] )  {
00164             return subdivider.ccwTurn_tl( jarc1, jarc2 ) ? -1 : 1;
00165         } else {
00166             return subdivider.ccwTurn_tr( jarc1, jarc2 ) ? 1 : -1;
00167         }
00168     }
00169     }
00170 }
00171 
00172 
00173 
00174 #endif /* __gluarcsorter_c_ */

Generated on Sun May 27 2012 04:23:39 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.