112 if(left_current>= n_left-1 ||
113 right_current>= n_right-1)
116 right_chain, right_current, pStream);
123 if(left_v <= right_v)
126 for(
j=right_current;
j<=n_right-1;
j++)
132 left_chain, left_current, left_current,
133 right_chain, right_current,
j-1,
137 left_chain, left_current,
144 for(
i=left_current;
i<=n_left-1;
i++)
150 left_chain, left_current,
i-1,
151 right_chain, right_current, right_current,
156 right_chain, right_current,
182 Int n_right,
Real** rightVerts,
190 assert(n_left>=1 && n_right>=1);
191 if(leftVerts[0][1] >= rightVerts[0][1])
195 topMostV = leftVerts[0];
201 topMostV = rightVerts[0];
212 pStream->
insert(topMostV);
213 for(
k=n_right-1;
k>=
j;
k--)
214 pStream->
insert(rightVerts[
j]);
228 pStream->
insert(topMostV);
230 for(
k=
i;
k<n_left;
k++)
241 if(leftVerts[
i][1] >= rightVerts[
j][1])
244 pStream->
insert(rightVerts[
j]);
246 pStream->
insert(topMostV);
254 if(leftVerts[
k][1] < rightVerts[
j][1])
267 topMostV = leftVerts[
k];
280 if(rightVerts[
k][1] <= leftVerts[
i][1])
287 pStream->
insert(rightVerts[
l]);
289 pStream->
insert(topMostV);
292 topMostV = rightVerts[
j-1];
302 if(inc_current >= inc_end-1)
return 1;
303 for(
i=inc_current;
i<= inc_end-2;
i++)
315 if(dec_current >= dec_end -1)
return 1;
316 for(
i=dec_current;
i<=dec_end-2;
i++)
343 if(inc_current <= inc_end)
347 for(
i=inc_current;
i<=inc_end-1;
i++)
366 if(dec_current <= dec_end)
371 for(
i=dec_end;
i>dec_current;
i--)
399 else if(n_cusps == 1)
440 list->deletePolygonListWithSline();
458 if(inc_current > inc_end || dec_current>dec_end)
461 dec_chain, dec_current, dec_end,
477 inc_chain, inc_current, inc_end,
478 dec_chain, dec_current, dec_end,
484 dec_chain, dec_current, dec_end,
501 if(inc_current > inc_end && dec_current>dec_end)
503 else if(inc_current>inc_end)
510 for(
i=dec_current;
i<=dec_end;
i++){
516 else if(dec_current> dec_end)
524 for(
i=inc_current;
i<=inc_end;
i++){
532 inc_array = inc_chain -> getArray();
533 dec_array = dec_chain -> getArray();
538 if(
compV2InY(inc_array[inc_current], dec_array[dec_current]) <= 0)
543 for(
i=dec_current;
i<=dec_end;
i++)
545 if(
compV2InY(inc_array[inc_current], dec_array[
i]) <= 0)
550 rChain.
outputFan(inc_array[inc_current], pStream);
552 inc_chain, inc_current, inc_end,
553 dec_chain,
i, dec_end,
561 for(
i=inc_current;
i<=inc_end;
i++)
563 if(
compV2InY(inc_array[
i], dec_array[dec_current]) >0)
568 rChain.
outputFan(dec_array[dec_current], pStream);
570 inc_chain,
i, inc_end,
571 dec_chain, dec_current,dec_end,
586 topV = botV = monoPolygon;
587 for(tempV = monoPolygon->
getNext(); tempV != monoPolygon; tempV = tempV->
getNext())
589 if(compFun(topV->
head(), tempV->
head())<0) {
592 if(compFun(botV->
head(), tempV->
head())>0) {
602 for(tempV = topV->
getNext(); tempV != botV; tempV = tempV->
getNext())
610 for(tempV = topV->
getPrev(); tempV != botV; tempV = tempV->
getPrev())
622 &dec_chain, 0, compFun, pStream);
635 topV = botV = monoPolygon;
636 for(tempV = monoPolygon->
getNext(); tempV != monoPolygon; tempV = tempV->
getNext())
650 for(tempV = topV->
getNext(); tempV != botV; tempV = tempV->
getNext())
658 for(tempV = topV->
getPrev(); tempV != botV; tempV = tempV->
getPrev())
681 Int is_increase_chain,
687 if(inc_smallIndex > inc_largeIndex)
689 if(inc_smallIndex == inc_largeIndex)
691 if(is_increase_chain)
699 if(is_increase_chain && botVertex[1] == inc_chain->
getVertex(inc_largeIndex)[1])
709 else if( (!is_increase_chain) && topVertex[1] == inc_chain->
getVertex(inc_smallIndex)[1])
714 inc_largeIndex, is_increase_chain, pStream);
724 for(
i=inc_smallIndex;
i<=inc_largeIndex;
i++){
741 assert( ! (inc_current> inc_end &&
742 dec_current> dec_end));
752 if(inc_current> inc_end)
760 for(
i=dec_current;
i<=dec_end;
i++){
767 else if(dec_current> dec_end)
774 for(
i=inc_current;
i<=inc_end;
i++){
782 inc_array = inc_chain -> getArray();
783 dec_array = dec_chain -> getArray();
788 if(compFun(inc_array[inc_current], dec_array[dec_current]) <= 0)
793 for(
i=dec_current;
i<=dec_end;
i++)
795 if(compFun(inc_array[inc_current], dec_array[
i]) <= 0)
800 rChain.
outputFan(inc_array[inc_current], pStream);
802 inc_chain, inc_current, inc_end,
803 dec_chain,
i, dec_end,
812 for(
i=inc_current;
i<=inc_end;
i++)
814 if(compFun(inc_array[
i], dec_array[dec_current]) >0)
819 rChain.
outputFan(dec_array[dec_current], pStream);
821 inc_chain,
i,inc_end,
822 dec_chain, dec_current,dec_end,
857 for(
i=dec_current;
i<dec_nVertices;
i++){
872 for(
i=inc_current;
i<inc_nVertices;
i++){
880 inc_array = inc_chain -> getArray();
881 dec_array = dec_chain -> getArray();
887 if(compFun(inc_array[inc_current], dec_array[dec_current]) <= 0)
892 for(
i=dec_current;
i<dec_nVertices;
i++)
894 if(compFun(inc_array[inc_current], dec_array[
i]) <= 0)
899 rChain.
outputFan(inc_array[inc_current], pStream);
901 inc_chain, inc_current,
911 for(
i=inc_current;
i<inc_nVertices;
i++)
913 if(compFun(inc_array[
i], dec_array[dec_current]) >0)
918 rChain.
outputFan(dec_array[dec_current], pStream);
921 dec_chain, dec_current,
953 for(
i=dec_current;
i<dec_nVertices;
i++){
968 for(
i=inc_current;
i<inc_nVertices;
i++){
976 inc_array = inc_chain -> getArray();
977 dec_array = dec_chain -> getArray();
983 if(
compV2InY(inc_array[inc_current], dec_array[dec_current]) <= 0)
988 for(
i=dec_current;
i<dec_nVertices;
i++)
990 if(
compV2InY(inc_array[inc_current], dec_array[
i]) <= 0)
995 rChain.
outputFan(inc_array[inc_current], pStream);
997 inc_chain, inc_current,
1006 for(
i=inc_current;
i<inc_nVertices;
i++)
1008 if(
compV2InY(inc_array[
i], dec_array[dec_current]) >0)
1013 rChain.
outputFan(dec_array[dec_current], pStream);
1016 dec_chain, dec_current,
1041 Int tempIndex, oldtempIndex = 0;
1045 if(inc_chain == botVertex) {
1053 for(
i=0;
i<
temp->get_npoints();
i++){
1058 else if(dec_chain==botVertex) {
1066 for(
i=0;
i<
temp->get_npoints();
i++){
1076 tempIndex = dec_index;
1079 oldtempIndex = tempIndex;
1082 if(tempIndex ==
temp->get_npoints()-1){
1097 tempIndex = inc_index;
1100 oldtempIndex = tempIndex;
1103 if(tempIndex ==
temp->get_npoints()-1){
1124 for(
i=0;
i<nVertices;
i++)
1204 if(startIndex > endIndex)
1206 else if(
array[endIndex][1] >
v)
1210 for(
i=endIndex-1;
i>=startIndex;
i--)
1230 if(startIndex > endIndex)
1232 else if(
array[endIndex][1] >=
v)
1236 for(
i=endIndex-1;
i>=startIndex;
i--)
1257 if(startIndex > endIndex)
1258 return startIndex-1;
1259 else if(
array[startIndex][1] <
v)
1260 return startIndex-1;
1264 for(
i=startIndex;
i<=endIndex;
i++)
1291 if(startIndex > endIndex)
1292 return startIndex-1;
1293 else if(
array[startIndex][1] <
v)
1294 return startIndex-1;
1297 for(
i=startIndex+1;
i<=endIndex;
i++)
1434 for(
i=
j;
i>=1;
i--) {
void deleteSinglePolygonWithSline()
void connectDiagonal_2slines(directedLine *v1, directedLine *v2, directedLine **ret_p1, directedLine **ret_p2, directedLine *list)
void insert(directedLine *nl)
void triangle(Real A[2], Real B[2], Real C[2])
void insert(Real u, Real v)
reflexChain(Int size, Int isIncreasing)
void outputFan(Real v[2], primStream *pStream)
void processNewVertex(Real v[2], primStream *pStream)
void insert(Real u, Real v)
Int findIndexAbove(Real v)
Int findIndexStrictBelowGen(Real v, Int startIndex, Int EndIndex)
Int skipEqualityFromStart(Real v, Int start, Int end)
Int findIndexFirstAboveEqualGen(Real v, Int startIndex, Int endIndex)
void appendVertex(Real *ptr)
Int findIndexBelowGen(Real v, Int startIndex, Int EndIndex)
Int findDecreaseChainFromEnd(Int begin, Int end)
Int findIndexAboveGen(Real v, Int startIndex, Int EndIndex)
Int compV2InY(Real A[2], Real B[2])
Int compV2InX(Real A[2], Real B[2])
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
directedLine * monoPolyPart(directedLine *polygon)
void triangulateXYMonoTB(Int n_left, Real **leftVerts, Int n_right, Real **rightVerts, primStream *pStream)
void monoTriangulationRecGen(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, Int inc_end, vertexArray *dec_chain, Int dec_current, Int dec_end, primStream *pStream)
void monoTriangulationRecFunGen(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, Int inc_end, vertexArray *dec_chain, Int dec_current, Int dec_end, Int(*compFun)(Real *, Real *), primStream *pStream)
void monoTriangulation2(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_smallIndex, Int inc_largeIndex, Int is_increase_chain, primStream *pStream)
static int chainConcave(vertexArray *dec_chain, Int dec_current, Int dec_end)
void monoTriangulationRecGenOpt(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, Int inc_end, vertexArray *dec_chain, Int dec_current, Int dec_end, primStream *pStream)
void monoTriangulationRecGenInU(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, Int inc_end, vertexArray *dec_chain, Int dec_current, Int dec_end, primStream *pStream)
directedLine * polygonConvert(directedLine *polygon)
void monoTriangulationRecGenTBOpt(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, Int inc_end, vertexArray *dec_chain, Int dec_current, Int dec_end, primStream *pStream)
void monoTriangulationFun(directedLine *monoPolygon, Int(*compFun)(Real *, Real *), primStream *pStream)
void monoTriangulationRecFun(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, vertexArray *dec_chain, Int dec_current, Int(*compFun)(Real *, Real *), primStream *pStream)
void monoTriangulationRecOpt(Real *topVertex, Real *botVertex, vertexArray *left_chain, Int left_current, vertexArray *right_chain, Int right_current, primStream *pStream)
void monoTriangulation(directedLine *monoPolygon, primStream *pStream)
static int chainConvex(vertexArray *inc_chain, Int inc_current, Int inc_end)
void monoTriangulationRec(Real *topVertex, Real *botVertex, vertexArray *inc_chain, Int inc_current, vertexArray *dec_chain, Int dec_current, primStream *pStream)
void monoTriangulationOpt(directedLine *poly, primStream *pStream)
void findInteriorCuspsX(directedLine *polygon, Int &ret_n_interior_cusps, directedLine **ret_interior_cusps)
directedLine * findDiagonal_singleCuspX(directedLine *cusp)
Int isReflex(directedLine *v)
static Real area(Real A[2], Real B[2], Real C[2])