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

partitionX.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 ** $Date: 2006-03-12 00:07:02 +0000 (Sun, 12 Mar 2006) $ $Revision: 1.1 $
00035 */
00036 /*
00037 ** $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/nurbtess/partitionX.cc,v 1.1 2004/02/02 16:39:13 navaraf Exp $
00038 */
00039 
00040 #include <stdlib.h>
00041 #include <stdio.h>
00042 
00043 #include "partitionX.h"
00044 
00045 #define CONCAVITY_ZERO 1.0e-6 //this number is used to test whether a vertex is concave (refelx) 
00046                               //or not. The test needs to compute the area of the three adjacent 
00047                               //vertices to see if the are is positive or negative. 
00048 
00049 Int isCuspX(directedLine *v)
00050 {
00051   //if v->prev <= v && v->next <= v
00052   //|| v->prev >= v && v->next >= v
00053   Real* T = v->head();
00054   Real* P = v->getPrev()->head();
00055   Real* N = v->getNext()->head();
00056   if(
00057      (compV2InX(T,P) != -1 && 
00058       compV2InX(T,N) != -1
00059       ) ||
00060      (compV2InX(T,P) != 1 && 
00061       compV2InX(T,N) != 1
00062       )
00063      )
00064     return 1;
00065   else
00066     return 0;
00067 }
00068 
00069 Int isReflexX(directedLine* v)
00070 {
00071   Real* A = v->getPrev()->head();
00072   Real* B = v->head();
00073   Real* C = v->tail();
00074   Real Bx,By, Cx, Cy;
00075   //scale them in case they are too small
00076   Bx = 10*(B[0] - A[0]);
00077   By = 10*(B[1] - A[1]);
00078   Cx = 10*(C[0] - A[0]);
00079   Cy = 10*(C[1] - A[1]);
00080 
00081   if(Bx*Cy - Cx*By < -CONCAVITY_ZERO) return 1;
00082   else return 0;
00083 }
00084 
00085 
00086 /*return 
00087  *0: not-cusp
00088  *1: interior cusp
00089  *2: exterior cusp
00090  */
00091 Int cuspTypeX(directedLine *v)
00092 {
00093   if(! isCuspX(v)) return 0;
00094   else 
00095     {
00096 //printf("isCusp,%f,%f\n", v->head()[0], v->head()[1]);
00097       if(isReflexX(v)) 
00098     {
00099 //    printf("isReflex\n");
00100       return 1;
00101     }
00102       else
00103     {
00104 //    printf("not isReflex\n");
00105       return 2;
00106     }
00107     }
00108 }
00109 
00110 Int numInteriorCuspsX(directedLine *polygon)
00111 {
00112   directedLine *temp;
00113   int ret = 0;
00114   if(cuspTypeX(polygon) == 1)
00115     ret++;
00116   for(temp = polygon->getNext(); temp != polygon; temp = temp->getNext())
00117     if(cuspTypeX(temp) == 1)
00118       ret++;
00119   return ret;
00120 }
00121   
00122 
00123 void findInteriorCuspsX(directedLine *polygon, Int& ret_n_interior_cusps,
00124             directedLine** ret_interior_cusps)
00125 {
00126   directedLine *temp;
00127   ret_n_interior_cusps = 0;
00128   if(cuspTypeX(polygon) == 1)
00129     {
00130       ret_interior_cusps[ret_n_interior_cusps++] = polygon;
00131     }
00132   for(temp = polygon->getNext(); temp != polygon; temp = temp->getNext())    
00133     if(cuspTypeX(temp) == 1)
00134       {
00135     ret_interior_cusps[ret_n_interior_cusps++] = temp;    
00136       }
00137 }
00138 
00139 directedLine* findDiagonal_singleCuspX(directedLine* cusp)
00140 {
00141   directedLine* temp;
00142   Int is_minimal = ((compV2InX(cusp->head(), cusp->tail()) == -1)? 1:0);
00143 
00144   if(is_minimal)
00145     for(temp = cusp->getNext(); temp != cusp; temp = temp->getNext())
00146       {
00147     if(compV2InX(cusp->head(), temp->head()) == 1)
00148       {    
00149         return temp;
00150       }
00151       }
00152   else //is maxmal 
00153     for(temp = cusp->getNext(); temp != cusp; temp = temp->getNext())
00154       {
00155     if(compV2InX(cusp->head(), temp->head()) == -1)
00156       {    
00157         return temp;
00158       }
00159       }
00160   return NULL;
00161 }
00162       
00163 
00164      

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