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

directedLine.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/directedLine.h,v 1.1 2004/02/02 16:39:13 navaraf Exp $
00038 */
00039 
00040 #ifndef _DIRECTEDLINE_H
00041 #define _DIRECTEDLINE_H
00042 
00043 #include "definitions.h"
00044 #include "sampledLine.h"
00045 
00046 enum {INCREASING, DECREASING};
00047 
00048 class directedLine {
00049   short direction; /*INCREASING or DECREASING*/
00050   sampledLine* sline;
00051   directedLine* next; /*double linked list*/
00052   directedLine* prev; /*double linked list*/
00053 
00054   /*in case we need a list of polygons each
00055    *consisting of a double linked list
00056    */
00057   directedLine* nextPolygon;
00058 
00059   /*optimization make cutoff polygon faster*/
00060 /*  directedLine* prevPolygon;*/
00061 
00062   Int rootBit; /*1 if this is a root of the polygon, set by setRootBit*/
00063                /*and reset by resetRootBit()*/
00064 
00065   directedLine* rootLink; /*fast root-finding*/
00066 
00067 
00068 
00069 public:
00070   directedLine(short dir, sampledLine* sl);
00071   directedLine();
00072   ~directedLine();
00073 
00074   void init(short dir, sampledLine* sl);
00075 
00076   Real* head(); /*points[0] if INCREASING, points[n-1] otherwise*/
00077   Real* tail(); /*points[n-1] if INCREASING, points[0] otherwise*/
00078   Real* getVertex(Int i); /*points[i] if INCREASING, points[n-1-i] otherwise*/
00079   Int get_npoints() {return sline->get_npoints();}
00080   directedLine* getPrev() {return prev;}
00081   directedLine* getNext() {return next;}
00082   directedLine* getNextPolygon()  {return nextPolygon;}
00083   sampledLine*  getSampledLine()  {return sline;}
00084 
00085   short getDirection(){return direction;}
00086   void putDirection(short dir) {direction = dir;}
00087   void putPrev(directedLine *p) {prev = p;}
00088   void putNext(directedLine *p) {next = p;}
00089 
00090   /*insert a new line between prev and this*/
00091   void insert(directedLine* nl);
00092 
00093   /*delete all the polygons following the link: nextPolygon.
00094    *notice that sampledLine is not deleted. The caller is
00095    *responsible for that
00096    */
00097   void  deletePolygonList();
00098   void  deleteSinglePolygon();
00099 
00100   void  deleteSinglePolygonWithSline(); //also delete sanmpled line
00101   void  deletePolygonListWithSline(); //also delete sanmpled line
00102 
00103   void deleteSingleLine(directedLine* dline);
00104   directedLine* deleteDegenerateLines();
00105   directedLine* deleteDegenerateLinesAllPolygons();
00106   directedLine* cutIntersectionAllPoly(int& cutOccur);
00107 
00108   /*check to see if the list forms a closed polygon
00109    *return 1 if yes
00110    */
00111   short isPolygon();
00112 
00113   Int compInY(directedLine* nl);
00114   Int compInX(directedLine* nl);
00115 
00116   /*return an array of pointers.
00117    *the
00118    */
00119   directedLine** sortAllPolygons();
00120 
00121   Int numEdges();
00122   Int numEdgesAllPolygons();
00123   Int numPolygons();
00124 
00125   /*check if the head of this edge is connected to
00126    *the tail of the prev
00127    */
00128   short isConnected();
00129 
00130   Real polyArea();
00131 
00132   void printSingle();
00133   void printList();
00134   void printAllPolygons();
00135   void writeAllPolygons(char* filename);
00136 
00137 
00138   /*insert a polygon: using nextPolygon*/
00139   directedLine* insertPolygon(directedLine* newpolygon);
00140   directedLine* cutoffPolygon(directedLine *p);
00141 
00142   Int toArraySinglePolygon(directedLine** array, Int index);
00143   directedLine** toArrayAllPolygons(Int& total_num_edges);
00144 
00145   void connectDiagonal(directedLine* v1, directedLine* v2,
00146                directedLine** ret_p1,
00147                directedLine** ret_p2,
00148                sampledLine** generatedLine, directedLine* list);
00149 
00150   /*generate two slines
00151    */
00152   void connectDiagonal_2slines(directedLine* v1, directedLine* v2,
00153                directedLine** ret_p1,
00154                directedLine** ret_p2,
00155                directedLine* list);
00156 
00157   Int samePolygon(directedLine* v1, directedLine* v2);
00158   void setRootBit() {rootBit = 1;}
00159   void resetRootBit() {rootBit = 0;}
00160   directedLine* findRoot();
00161 
00162   void rootLinkSet(directedLine* r) {rootLink = r;}
00163   directedLine* rootLinkFindRoot();
00164 
00165   //the chain from begin to end is deleted (the space is deallocated)
00166   //and a new edge(which connectes the head of begin and the tail of end)
00167   // is inserted. The new polygon is returned.
00168   //notice that "this" is arbitrary
00169   directedLine* deleteChain(directedLine* begin, directedLine* end);
00170 };
00171 
00172 directedLine*  readAllPolygons(char* filename);
00173 
00174 extern Int compV2InY(Real A[2], Real B[2]);
00175 extern Int compV2InX(Real A[2], Real B[2]);
00176 
00177 #endif
00178 

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.