Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > DoxygenmonoTriangulation.h
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: 2007-10-19 23:21:45 +0000 (Fri, 19 Oct 2007) $ $Revision: 1.1 $ 00035 */ 00036 /* 00037 ** $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/nurbtess/monoTriangulation.h,v 1.1 2004/02/02 16:39:13 navaraf Exp $ 00038 */ 00039 00040 #ifndef _MONO_TRIANGULATION_H 00041 #define _MONO_TRIANGULATION_H 00042 00043 #include "definitions.h" 00044 #include "primitiveStream.h" 00045 #include "directedLine.h" 00046 00047 class Backend; 00048 class Arc; 00049 typedef Arc *Arc_ptr; 00050 00051 class reflexChain{ 00052 Real2 *queue; 00053 /*the order of the polygon vertices: either q[0],q[1].., or 00054 * q[n-1], q[n-2], ..., q[0] 00055 *this order determines the interior of the polygon, so it 00056 *also used to determines whether a chain is reflex or convex 00057 */ 00058 Int isIncreasing; 00059 Int index_queue; 00060 Int size_queue; /*allocated size*/ 00061 00062 public: 00063 reflexChain(Int size, Int isIncreasing); 00064 ~reflexChain(); 00065 00066 void insert(Real u, Real v); 00067 void insert(Real v[2]); 00068 00069 void processNewVertex(Real v[2], primStream* pStream); 00070 void outputFan(Real v[2], primStream* pStream); 00071 00072 void processNewVertex(Real v[2], Backend* backend); 00073 void outputFan(Real v[2], Backend* backend); 00074 00075 void print(); 00076 }; 00077 00078 /*dynamic array of pointers to reals. 00079 *Intended to store an array of (u,v). 00080 *Notice that it doesn't allocate or dealocate the space 00081 *for the (u,v) themselfs. So it assums that someone else 00082 *is taking care of them, while this class only plays with 00083 *the pointers. 00084 */ 00085 class vertexArray{ 00086 Real** array; 00087 Int index; 00088 Int size; 00089 public: 00090 vertexArray(Int s); 00091 vertexArray(Real vertices[][2], Int nVertices); 00092 ~vertexArray(); 00093 void appendVertex(Real* ptr); /*the content (pointed by ptr is NOT copied*/ 00094 Real* getVertex(Int i) {return array[i];} 00095 Real** getArray() {return array;} 00096 Int getNumElements() {return index;} 00097 Int findIndexAbove(Real v); 00098 Int findIndexAboveGen(Real v, Int startIndex, Int EndIndex); 00099 Int findIndexBelowGen(Real v, Int startIndex, Int EndIndex); 00100 Int findIndexStrictBelowGen(Real v, Int startIndex, Int EndIndex); 00101 Int findIndexFirstAboveEqualGen(Real v, Int startIndex, Int endIndex); 00102 Int skipEqualityFromStart(Real v, Int start, Int end); 00103 //return i such that fron [i+1, end] is strictly U-monotone (left to right 00104 Int findDecreaseChainFromEnd(Int begin, Int end); 00105 void print(); 00106 }; 00107 00108 void monoTriangulation(directedLine* monoPolygon, primStream* pStream); 00109 00110 void monoTriangulationRec(Real* topVertex, Real* botVertex, 00111 vertexArray* inc_chain, Int inc_current, 00112 vertexArray* dec_chain, Int dec_current, 00113 primStream* pStream); 00114 00115 void monoTriangulationRec(directedLine* inc_chain, Int inc_index, 00116 directedLine* dec_chain, Int dec_index, 00117 directedLine* topVertex, Int top_index, 00118 directedLine* botVertex, 00119 primStream* pStream); 00120 00121 /*the chain could be increasing or decreasing, although we use the 00122 * name inc_chain. 00123 *the argument is_increase_chain indicates whether this chain 00124 *is increasing (left chain in V-monotone case) or decreaing (right chain 00125 *in V-monotone case). 00126 */ 00127 void monoTriangulation2(Real* topVertex, Real* botVertex, 00128 vertexArray* inc_chain, Int inc_smallIndex, 00129 Int inc_largeIndex, 00130 Int is_increase_chain, 00131 primStream* pStream); 00132 void monoTriangulationRecGen(Real* topVertex, Real* botVertex, 00133 vertexArray* inc_chain, Int inc_current, Int inc_end, 00134 vertexArray* dec_chain, Int dec_current, Int dec_end, 00135 primStream* pStream); 00136 00137 void monoTriangulationRecGenOpt(Real* topVertex, Real* botVertex, 00138 vertexArray* inc_chain, Int inc_current, Int inc_end, 00139 vertexArray* dec_chain, Int dec_current, Int dec_end, 00140 primStream* pStream); 00141 00142 void triangulateXYMonoTB(Int n_left, Real** leftVerts, 00143 Int n_right, Real** rightVerts, 00144 primStream* pStream); 00145 00146 void monoTriangulationRecGenTBOpt(Real* topVertex, Real* botVertex, 00147 vertexArray* inc_chain, Int inc_current, Int inc_end, 00148 vertexArray* dec_chain, Int dec_current, Int dec_end, 00149 primStream* pStream); 00150 00151 void monoTriangulationRecOpt(Real* topVertex, Real* botVertex, 00152 vertexArray* left_chain, Int left_current, 00153 vertexArray* right_chain, Int right_current, 00154 primStream* pStream); 00155 00156 void monoTriangulationRecFunGen(Real* topVertex, Real* botVertex, 00157 vertexArray* inc_chain, Int inc_current, Int inc_end, 00158 vertexArray* dec_chain, Int dec_current, Int dec_end, 00159 Int (*compFun)(Real*, Real*), 00160 primStream* pStream); 00161 00162 void monoTriangulationRecFun(Real* topVertex, Real* botVertex, 00163 vertexArray* inc_chain, Int inc_current, 00164 vertexArray* dec_chain, Int dec_current, 00165 Int (*compFun)(Real*, Real*), 00166 primStream* pStream); 00167 void monoTriangulationFun(directedLine* monoPolygon, 00168 Int (*compFun)(Real*, Real*), primStream* pStream); 00169 00170 00171 00172 00173 void monoTriangulationRec(Real* topVertex, Real* botVertex, 00174 vertexArray* inc_chain, Int inc_current, 00175 vertexArray* dec_chain, Int dec_current, 00176 Backend* backend); 00177 00178 void monoTriangulationFunBackend(Arc_ptr loop, Int (*compFun)(Real*, Real*), Backend* backend); 00179 00180 void monoTriangulationRecFunBackend(Real* topVertex, Real* botVertex, 00181 vertexArray* inc_chain, Int inc_current, 00182 vertexArray* dec_chain, Int dec_current, 00183 Int (*compFun)(Real*, Real*), 00184 Backend* backend); 00185 00186 void monoTriangulationOpt(directedLine* poly, primStream* pStream); 00187 00188 #endif 00189 00190 00191 00192 Generated on Sun May 27 2012 04:23:49 for ReactOS by
1.7.6.1
|