monoTriangulation.h [plain text]
#ifndef _MONO_TRIANGULATION_H
#define _MONO_TRIANGULATION_H
#include "definitions.h"
#include "primitiveStream.h"
#include "directedLine.h"
#include "arc.h"
class Backend;
class reflexChain{
Real2 *queue;
Int isIncreasing;
Int index_queue;
Int size_queue;
public:
reflexChain(Int size, Int isIncreasing);
~reflexChain();
void insert(Real u, Real v);
void insert(Real v[2]);
void processNewVertex(Real v[2], primStream* pStream);
void outputFan(Real v[2], primStream* pStream);
void processNewVertex(Real v[2], Backend* backend);
void outputFan(Real v[2], Backend* backend);
void print();
};
class vertexArray{
Real** array;
Int index;
Int size;
public:
vertexArray(Int s);
vertexArray(Real vertices[][2], Int nVertices);
~vertexArray();
void appendVertex(Real* ptr);
Real* getVertex(Int i) {return array[i];}
Real** getArray() {return array;}
Int getNumElements() {return index;}
Int findIndexAbove(Real v);
Int findIndexAboveGen(Real v, Int startIndex, Int EndIndex);
Int findIndexBelowGen(Real v, Int startIndex, Int EndIndex);
Int findIndexStrictBelowGen(Real v, Int startIndex, Int EndIndex);
Int findIndexFirstAboveEqualGen(Real v, Int startIndex, Int endIndex);
Int skipEqualityFromStart(Real v, Int start, Int end);
Int findDecreaseChainFromEnd(Int begin, Int end);
void print();
};
void monoTriangulation(directedLine* monoPolygon, primStream* pStream);
void monoTriangulationRec(Real* topVertex, Real* botVertex,
vertexArray* inc_chain, Int inc_current,
vertexArray* dec_chain, Int dec_current,
primStream* pStream);
void monoTriangulationRec(directedLine* inc_chain, Int inc_index,
directedLine* dec_chain, Int dec_index,
directedLine* topVertex, Int top_index,
directedLine* botVertex,
primStream* pStream);
void monoTriangulation2(Real* topVertex, Real* botVertex,
vertexArray* inc_chain, Int inc_smallIndex,
Int inc_largeIndex,
Int is_increase_chain,
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 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 triangulateXYMonoTB(Int n_left, Real** leftVerts,
Int n_right, Real** rightVerts,
primStream* pStream);
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 monoTriangulationRecOpt(Real* topVertex, Real* botVertex,
vertexArray* left_chain, Int left_current,
vertexArray* right_chain, Int right_current,
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 monoTriangulationRecFun(Real* topVertex, Real* botVertex,
vertexArray* inc_chain, Int inc_current,
vertexArray* dec_chain, Int dec_current,
Int (*compFun)(Real*, Real*),
primStream* pStream);
void monoTriangulationFun(directedLine* monoPolygon,
Int (*compFun)(Real*, Real*), primStream* pStream);
void monoTriangulationRec(Real* topVertex, Real* botVertex,
vertexArray* inc_chain, Int inc_current,
vertexArray* dec_chain, Int dec_current,
Backend* backend);
void monoTriangulationFunBackend(Arc_ptr loop, Int (*compFun)(Real*, Real*), Backend* backend);
void monoTriangulationRecFunBackend(Real* topVertex, Real* botVertex,
vertexArray* inc_chain, Int inc_current,
vertexArray* dec_chain, Int dec_current,
Int (*compFun)(Real*, Real*),
Backend* backend);
void monoTriangulationOpt(directedLine* poly, primStream* pStream);
#endif