ReactOS 0.4.17-dev-966-gf06eace
monoChain Class Reference

#include <monoChain.h>

Collaboration diagram for monoChain:

Public Member Functions

 monoChain (directedLine *cHead, directedLine *cTail)
 
 ~monoChain ()
 
void setNext (monoChain *n)
 
void setPrev (monoChain *p)
 
void setNextPolygon (monoChain *np)
 
monoChain * getNext ()
 
monoChain * getPrev ()
 
directedLine * getHead ()
 
directedLine * getTail ()
 
void resetCurrent ()
 
void deleteLoop ()
 
void deleteLoopList ()
 
void insert (monoChain *nc)
 
Int numChainsSingleLoop ()
 
Int numChainsAllLoops ()
 
monoChain ** toArrayAllLoops (Int &num_chains)
 
Int toArraySingleLoop (monoChain **array, Int index)
 
Real chainIntersectHoriz (Real y)
 
directedLine * find (Real y)
 
void printOneChain ()
 
void printChainLoop ()
 
void printAllLoops ()
 

Public Attributes

Int isKey
 
Real keyY
 

Private Attributes

directedLine * chainHead
 
directedLine * chainTail
 
monoChain * next
 
monoChain * prev
 
monoChain * nextPolygon
 
Real minX
 
Real maxX
 
Real minY
 
Real maxY
 
Int isIncrease
 
directedLine * current
 

Detailed Description

Definition at line 41 of file monoChain.h.

Constructor & Destructor Documentation

◆ monoChain()

monoChain::monoChain ( directedLine *  cHead,
directedLine *  cTail 
)

Definition at line 90 of file monoChain.cc.

91{
92 chainHead = cHead;
93 chainTail = cTail;
94 next = this;
95 prev = this;
96
98
99 //compute bounding box
101 minX = maxX = chainTail->head()[0];
102 minY = maxY = chainTail->head()[1];
103
104 for(temp=chainHead; temp!=cTail; temp = temp->getNext())
105 {
106 if(temp->head()[0] < minX)
107 minX = temp->head()[0];
108 if(temp->head()[0] > maxX)
109 maxX = temp->head()[0];
110
111 if(temp->head()[1] < minY)
112 minY = temp->head()[1];
113 if(temp->head()[1] > maxY)
114 maxY = temp->head()[1];
115 }
116
117 //check whether the chain is increasing or decreasing
119 isIncrease = 1;
120 else
121 isIncrease = 0;
122
123 //initilize currrent, this is used for accelerating search
124 if(isIncrease)
126 else
128
129 isKey = 0;
130 keyY = 0;
131}
Int compInY(directedLine *nl)
Real * head()
directedLine * chainTail
Definition: monoChain.h:43
directedLine * chainHead
Definition: monoChain.h:42
monoChain * prev
Definition: monoChain.h:45
Real minX
Definition: monoChain.h:50
monoChain * next
Definition: monoChain.h:44
Int isIncrease
Definition: monoChain.h:51
Real maxY
Definition: monoChain.h:50
Real minY
Definition: monoChain.h:50
monoChain * nextPolygon
Definition: monoChain.h:46
directedLine * current
Definition: monoChain.h:55
Int isKey
Definition: monoChain.h:82
Real maxX
Definition: monoChain.h:50
Real keyY
Definition: monoChain.h:83
#define NULL
Definition: types.h:112
static calc_node_t temp
Definition: rpn_ieee.c:38

◆ ~monoChain()

monoChain::~monoChain ( )
inline

Definition at line 59 of file monoChain.h.

59{}

Member Function Documentation

◆ chainIntersectHoriz()

Real monoChain::chainIntersectHoriz ( Real  y)

Definition at line 208 of file monoChain.cc.

209{
211 if(isIncrease)
212 {
213 for(temp= current; temp != chainTail; temp = temp->getNext())
214 {
215 if(temp->head()[1] > y)
216 break;
217 }
218 current = temp->getPrev();
219 }
220 else
221 {
222 for(temp = current; temp != chainHead; temp = temp->getPrev())
223 {
224 if(temp->head()[1] > y)
225 break;
226 }
227 current = temp->getNext();
228 }
229 return intersectHoriz(current->head()[0], current->head()[1], current->tail()[0], current->tail()[1], y);
230}
Real * tail()
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
Real intersectHoriz(Real x1, Real y1, Real x2, Real y2, Real y)
Definition: monoChain.cc:79

◆ deleteLoop()

void monoChain::deleteLoop ( )

Definition at line 142 of file monoChain.cc.

143{
144 monoChain *temp, *tempNext;
145 prev->next = NULL;
146 for(temp=this; temp != NULL; temp = tempNext)
147 {
148 tempNext = temp->next;
149 delete temp;
150 }
151}

◆ deleteLoopList()

void monoChain::deleteLoopList ( )

Definition at line 153 of file monoChain.cc.

154{
155 monoChain *temp, *tempNext;
156 for(temp=this; temp != NULL; temp = tempNext)
157 {
158 tempNext = temp->nextPolygon;
159 temp->deleteLoop();
160 }
161}

Referenced by MC_partitionY().

◆ find()

directedLine * monoChain::find ( Real  y)

Definition at line 393 of file monoChain.cc.

394{
397 assert(current->head()[1] <= y);
398 if(isIncrease)
399 {
400 assert(chainTail->head()[1] >=y);
401 for(temp=current; temp!=chainTail; temp = temp->getNext())
402 {
403 if(temp->head()[1] > y)
404 break;
405 }
406 current = temp->getPrev();
407 ret = current;
408 }
409 else
410 {
411 for(temp=current; temp != chainHead; temp = temp->getPrev())
412 {
413 if(temp->head()[1] > y)
414 break;
415 }
416 current = temp->getNext();
417 ret = temp;
418 }
419 return ret;
420}
#define assert(_expr)
Definition: assert.h:32
return ret
Definition: mutex.c:147

Referenced by compChains().

◆ getHead()

directedLine * monoChain::getHead ( )
inline

Definition at line 66 of file monoChain.h.

66{return chainHead;}

Referenced by compChainHeadInY(), MC_findDiagonals(), and MC_sweepY().

◆ getNext()

monoChain * monoChain::getNext ( )
inline

Definition at line 64 of file monoChain.h.

64{return next;}

◆ getPrev()

monoChain * monoChain::getPrev ( )
inline

Definition at line 65 of file monoChain.h.

65{return prev;}

Referenced by MC_sweepY().

◆ getTail()

directedLine * monoChain::getTail ( )
inline

Definition at line 67 of file monoChain.h.

67{return chainTail;}

◆ insert()

void monoChain::insert ( monoChain *  nc)

Definition at line 134 of file monoChain.cc.

135{
136 nc->next = this;
137 nc->prev = prev;
138 prev->next = nc;
139 prev = nc;
140}

◆ numChainsAllLoops()

Int monoChain::numChainsAllLoops ( )

Definition at line 198 of file monoChain.cc.

199{
200 Int ret=0;
202 for(temp =this; temp != NULL; temp = temp->nextPolygon)
203 ret += temp->numChainsSingleLoop();
204 return ret;
205}
int Int
Definition: definitions.h:37

Referenced by toArrayAllLoops().

◆ numChainsSingleLoop()

Int monoChain::numChainsSingleLoop ( )

Definition at line 187 of file monoChain.cc.

188{
189 Int ret=0;
191 if(next == this) return 1;
192 ret = 1;
193 for(temp=next; temp != this; temp = temp->next)
194 ret++;
195 return ret;
196}

◆ printAllLoops()

void monoChain::printAllLoops ( )

Definition at line 443 of file monoChain.cc.

444{
446 for(temp=this; temp != NULL; temp = temp->nextPolygon)
447 temp->printChainLoop();
448}

◆ printChainLoop()

void monoChain::printChainLoop ( )

Definition at line 432 of file monoChain.cc.

433{
435 this->printOneChain();
436 for(temp = next; temp != this; temp = temp->next)
437 {
438 temp->printOneChain();
439 }
440 printf("\n");
441}
void printOneChain()
Definition: monoChain.cc:422
#define printf
Definition: freeldr.h:103

◆ printOneChain()

void monoChain::printOneChain ( )

Definition at line 422 of file monoChain.cc.

423{
425 for(temp = chainHead; temp != chainTail; temp = temp->getNext())
426 {
427 printf("(%f,%f) ", temp->head()[0], temp->head()[1]);
428 }
429 printf("(%f,%f) \n", chainTail->head()[0], chainTail->head()[1]);
430}

Referenced by printChainLoop().

◆ resetCurrent()

void monoChain::resetCurrent ( )
inline

Definition at line 69 of file monoChain.h.

◆ setNext()

void monoChain::setNext ( monoChain *  n)
inline

Definition at line 61 of file monoChain.h.

61{next = n;}
GLdouble n
Definition: glext.h:7729

◆ setNextPolygon()

void monoChain::setNextPolygon ( monoChain *  np)
inline

Definition at line 63 of file monoChain.h.

63{nextPolygon = np;}

Referenced by directedLineLoopListToMonoChainLoopList().

◆ setPrev()

void monoChain::setPrev ( monoChain *  p)
inline

Definition at line 62 of file monoChain.h.

62{prev = p;}
GLfloat GLfloat p
Definition: glext.h:8902

◆ toArrayAllLoops()

monoChain ** monoChain::toArrayAllLoops ( Int &  num_chains)

Definition at line 174 of file monoChain.cc.

175{
176 num_chains = numChainsAllLoops();
177 monoChain **ret = (monoChain**) malloc(sizeof(monoChain*) * num_chains);
178 assert(ret);
180 Int index = 0;
181 for(temp = this; temp != NULL; temp=temp->nextPolygon){
182 index = temp->toArraySingleLoop(ret, index);
183 }
184 return ret;
185}
Int numChainsAllLoops()
Definition: monoChain.cc:198
#define malloc
Definition: debug_ros.c:4
GLuint index
Definition: glext.h:6031

Referenced by MC_partitionY().

◆ toArraySingleLoop()

Int monoChain::toArraySingleLoop ( monoChain **  array,
Int  index 
)

Definition at line 163 of file monoChain.cc.

164{
166 array[index++] = this;
167 for(temp = next; temp != this; temp = temp->next)
168 {
169 array[index++] = temp;
170 }
171 return index;
172}
#define index(s, c)
Definition: various.h:29
Definition: undname.c:54

Member Data Documentation

◆ chainHead

directedLine* monoChain::chainHead
private

Definition at line 42 of file monoChain.h.

Referenced by chainIntersectHoriz(), find(), getHead(), monoChain(), printOneChain(), and resetCurrent().

◆ chainTail

directedLine* monoChain::chainTail
private

Definition at line 43 of file monoChain.h.

Referenced by chainIntersectHoriz(), find(), getTail(), monoChain(), printOneChain(), and resetCurrent().

◆ current

directedLine* monoChain::current
private

Definition at line 55 of file monoChain.h.

Referenced by chainIntersectHoriz(), find(), monoChain(), and resetCurrent().

◆ isIncrease

Int monoChain::isIncrease
private

Definition at line 51 of file monoChain.h.

Referenced by chainIntersectHoriz(), find(), monoChain(), and resetCurrent().

◆ isKey

Int monoChain::isKey

Definition at line 82 of file monoChain.h.

Referenced by compChains(), MC_sweepY(), and monoChain().

◆ keyY

Real monoChain::keyY

Definition at line 83 of file monoChain.h.

Referenced by compChains(), MC_sweepY(), and monoChain().

◆ maxX

Real monoChain::maxX
private

Definition at line 50 of file monoChain.h.

Referenced by monoChain().

◆ maxY

Real monoChain::maxY
private

Definition at line 50 of file monoChain.h.

Referenced by monoChain().

◆ minX

Real monoChain::minX
private

Definition at line 50 of file monoChain.h.

Referenced by monoChain().

◆ minY

Real monoChain::minY
private

Definition at line 50 of file monoChain.h.

Referenced by monoChain().

◆ next

monoChain* monoChain::next
private

◆ nextPolygon

monoChain* monoChain::nextPolygon
private

Definition at line 46 of file monoChain.h.

Referenced by monoChain(), and setNextPolygon().

◆ prev

monoChain* monoChain::prev
private

Definition at line 45 of file monoChain.h.

Referenced by deleteLoop(), getPrev(), insert(), monoChain(), and setPrev().


The documentation for this class was generated from the following files: