#ifndef _SAMPLEMONOPOLY_H
#define _SAMPLEMONOPOLY_H
#include "monoTriangulation.h"
#include "gridWrap.h"
#include "rectBlock.h"
void triangulateXYMono(Int n_upper, Real upperVerts[][2],
Int n_lower, Real lowerVerts[][2],
primStream* pStream);
void stripOfFanLeft(vertexArray* leftChain,
Int largeIndex,
Int smallIndex,
gridWrap* grid,
Int vlineIndex,
Int ulineSmallIndex,
Int ulineLargeIndex,
primStream* pStream,
Int gridLineUp
);
void sampleLeftOneGridStep(vertexArray* leftChain,
Int beginLeftIndex,
Int endLeftIndex,
gridBoundaryChain* leftGridChain,
Int leftGridChainStartIndex,
primStream* pStream
);
void sampleLeftSingleTrimEdgeRegion(Real upperVert[2], Real lowerVert[2],
gridBoundaryChain* gridChain,
Int beginIndex,
Int endIndex,
primStream* pStream);
void sampleLeftStripRec(vertexArray* leftChain,
Int topLeftIndex,
Int botLeftIndex,
gridBoundaryChain* leftGridChain,
Int leftGridChainStartIndex,
Int leftGridChainEndIndex,
primStream* pStream
);
void sampleLeftStrip(vertexArray* leftChain,
Int topLeftIndex,
Int botLeftIndex,
gridBoundaryChain* leftGridChain,
Int leftGridChainStartIndex,
Int leftGridChainEndIndex,
primStream* pStream
);
void findLeftGridIndices(directedLine* topEdge, Int firstGridIndex, Int lastGridIndex, gridWrap* grid, Int* ret_indices, Int* ret_inner);
void findRightGridIndices(directedLine* topEdge, Int firstGridIndex, Int lastGridIndex, gridWrap* grid, Int* ret_indices, Int* ret_inner);
void sampleMonoPoly(directedLine* polygon, gridWrap* grid, Int ulinear, Int vlinear, primStream *pStream, rectBlockArray* rbArray);
void sampleMonoPolyRec(
Real* topVertex,
Real* botVertex,
vertexArray* leftChain,
Int leftStartIndex,
vertexArray* rightChain,
Int rightStartIndex,
gridBoundaryChain* leftGridChain,
gridBoundaryChain* rightGridChain,
Int gridStartIndex,
primStream* pStream,
rectBlockArray* rbArray
);
void sampleLeftStripRecF(vertexArray* leftChain,
Int topLeftIndex,
Int botLeftIndex,
gridBoundaryChain* leftGridChain,
Int leftGridChainStartIndex,
Int leftGridChainEndIndex,
primStream* pStream
);
void findUpCorners(Real *topVertex,
vertexArray *leftChain,
Int leftChainStartIndex, Int leftChainEndIndex,
vertexArray *rightChain,
Int rightChainStartIndex, Int rightChainEndIndex,
Real v,
Real uleft,
Real uright,
Int& ret_leftCornerWhere,
Int& ret_leftCornerIndex,
Int& ret_rightCornerWhere,
Int& ret_rightCornerIndex
);
void findDownCorners(Real *botVertex,
vertexArray *leftChain, Int leftChainStartIndex, Int leftChainEndIndex,
vertexArray *rightChain, Int rightChainStartIndex, Int rightChainEndIndex,
Real v,
Real uleft,
Real uright,
Int& ret_leftCornerWhere,
Int& ret_leftCornerIndex,
Int& ret_rightCornerWhere,
Int& ret_rightCornerIndex
);
void findNeck(vertexArray *leftChain, Int botLeftIndex,
vertexArray *rightChain, Int botRightIndex,
Int& leftLastIndex,
Int& rightLastIndex
);
Int findNeckF(vertexArray *leftChain, Int botLeftIndex,
vertexArray *rightChain, Int botRightIndex,
gridBoundaryChain* leftGridChain,
gridBoundaryChain* rightGridChain,
Int gridStartIndex,
Int& neckLeft,
Int& neckRight);
void findTopAndBot(directedLine* polygon,
directedLine*& topV,
directedLine*& botV);
void findGridChains(directedLine* top, directedLine* bot,
gridWrap* grid,
gridBoundaryChain*& leftGridChain,
gridBoundaryChain*& rightGridChain);
void toVertexArrays(directedLine* topV, directedLine* botV, vertexArray& leftChain, vertexArray& rightChain);
void drawCorners(
Real* topV, Real* botV,
vertexArray* leftChain,
vertexArray* rightChain,
gridBoundaryChain* leftGridChain,
gridBoundaryChain* rightGridChain,
Int gridIndex1,
Int gridIndex2,
Int leftCornerWhere,
Int leftCornerIndex,
Int rightCornerWhere,
Int rightCornerIndex,
Int bot_leftCornerWhere,
Int bot_leftCornerIndex,
Int bot_rightCornerWhere,
Int bot_rightCornerIndex);
Int checkMiddle(vertexArray* chain, Int begin, Int end,
Real vup, Real vbelow);
#endif