ReactOS  0.4.14-dev-323-g6fe6a88
monoChain.h
Go to the documentation of this file.
1 /*
2  * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3  * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice including the dates of first publication and
13  * either this permission notice or a reference to
14  * http://oss.sgi.com/projects/FreeB/
15  * shall be included in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20  * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24  *
25  * Except as contained in this notice, the name of Silicon Graphics, Inc.
26  * shall not be used in advertising or otherwise to promote the sale, use or
27  * other dealings in this Software without prior written authorization from
28  * Silicon Graphics, Inc.
29  */
30 /*
31 */
32 
33 #ifndef _MONO_CHAIN_H
34 #define _MONO_CHAIN_H
35 
36 //#include "directedLine.h"
37 #include "partitionY.h"
38 
39 class monoChain;
40 
41 class monoChain{
46  monoChain* nextPolygon; //a list of polygons
47 
48  //cached informatin
49  //bounding box
52 
53  //for efficiently comparing two chains
54 
56 
57 public:
58  monoChain(directedLine* cHead, directedLine* cTail);
60 
61  inline void setNext(monoChain* n) {next = n;}
62  inline void setPrev(monoChain* p) {prev = p;}
63  inline void setNextPolygon(monoChain* np) {nextPolygon = np;}
64  inline monoChain* getNext() {return next;}
65  inline monoChain* getPrev() {return prev;}
66  inline directedLine* getHead() {return chainHead;}
67  inline directedLine* getTail() {return chainTail;}
68 
69  inline void resetCurrent() { current = ((isIncrease==1)? chainHead:chainTail);}
70 
71  void deleteLoop();
72  void deleteLoopList();
73 
74  //insert a new chain between prev and this
75  void insert(monoChain* nc);
76 
79  monoChain** toArrayAllLoops(Int& num_chains);
81 
83  Real keyY; //the current horizotal line
84  Real chainIntersectHoriz(Real y); //updates current incrementally for efficiency
85  directedLine* find(Real y);//find dline so that y intersects dline.
86 
87  void printOneChain();
88  void printChainLoop();
89  void printAllLoops();
90 
91 };
92 
95 Int MC_sweepY(Int nVertices, monoChain** sortedVertices, sweepRange** ret_ranges);
96 
97 void MC_findDiagonals(Int total_num_edges, monoChain** sortedVertices,
98  sweepRange** ranges, Int& num_diagonals,
99  directedLine** diagonal_vertices);
100 
101 directedLine* MC_partitionY(directedLine *polygons, sampledLine **retSampledLines);
102 
103 #endif
monoChain * getPrev()
Definition: monoChain.h:65
void deleteLoop()
Definition: monoChain.cc:142
monoChain * next
Definition: monoChain.h:44
Int numChainsAllLoops()
Definition: monoChain.cc:198
Real minY
Definition: monoChain.h:50
GLdouble n
Definition: glext.h:7729
void MC_findDiagonals(Int total_num_edges, monoChain **sortedVertices, sweepRange **ranges, Int &num_diagonals, directedLine **diagonal_vertices)
Definition: monoChain.cc:567
void printChainLoop()
Definition: monoChain.cc:432
~monoChain()
Definition: monoChain.h:59
monoChain * prev
Definition: monoChain.h:45
Real keyY
Definition: monoChain.h:83
directedLine * MC_partitionY(directedLine *polygons, sampledLine **retSampledLines)
Definition: monoChain.cc:647
void setPrev(monoChain *p)
Definition: monoChain.h:62
Int isIncrease
Definition: monoChain.h:51
Int isKey
Definition: monoChain.h:82
monoChain * directedLineLoopListToMonoChainLoopList(directedLine *list)
Definition: monoChain.cc:273
directedLine * current
Definition: monoChain.h:55
Real maxX
Definition: monoChain.h:50
Real maxY
Definition: monoChain.h:50
Int numChainsSingleLoop()
Definition: monoChain.cc:187
GLuint index
Definition: glext.h:6031
void printAllLoops()
Definition: monoChain.cc:443
monoChain * nextPolygon
Definition: monoChain.h:46
directedLine * chainTail
Definition: monoChain.h:43
void deleteLoopList()
Definition: monoChain.cc:153
directedLine * chainHead
Definition: monoChain.h:42
Real chainIntersectHoriz(Real y)
Definition: monoChain.cc:208
directedLine * find(Real y)
Definition: monoChain.cc:393
Definition: _list.h:228
directedLine * getTail()
Definition: monoChain.h:67
Real minX
Definition: monoChain.h:50
void setNext(monoChain *n)
Definition: monoChain.h:61
monoChain * directedLineLoopToMonoChainLoop(directedLine *loop)
Definition: monoChain.cc:232
Int toArraySingleLoop(monoChain **array, Int index)
Definition: monoChain.cc:163
directedLine * getHead()
Definition: monoChain.h:66
monoChain(directedLine *cHead, directedLine *cTail)
Definition: monoChain.cc:90
float Real
Definition: definitions.h:36
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
void insert(monoChain *nc)
Definition: monoChain.cc:134
void resetCurrent()
Definition: monoChain.h:69
Int MC_sweepY(Int nVertices, monoChain **sortedVertices, sweepRange **ret_ranges)
Definition: monoChain.cc:451
monoChain * getNext()
Definition: monoChain.h:64
GLfloat GLfloat p
Definition: glext.h:8902
void setNextPolygon(monoChain *np)
Definition: monoChain.h:63
monoChain ** toArrayAllLoops(Int &num_chains)
Definition: monoChain.cc:174
void printOneChain()
Definition: monoChain.cc:422
int Int
Definition: definitions.h:37