28 #define qh_ANGLEredundant 6.0 36 #define qh_ANGLEdegen 5.0 48 #define qh_ANGLEconcave 1.5 78 #define qh_MERGEapex True 112 #define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge) void qh_mergesimplex(facetT *facet1, facetT *facet2, boolT mergeapex)
facetT * qh_findbestneighbor(facetT *facet, realT *distp, realT *mindistp, realT *maxdistp)
int qh_comparevisit(const void *p1, const void *p2)
int qh_compareangle(const void *p1, const void *p2)
void qh_flippedmerges(facetT *facetlist, boolT *wasmerge)
void qh_mark_dupridges(facetT *facetlist)
ridgeT * qh_hashridge_find(setT *hashtable, int hashsize, ridgeT *ridge, vertexT *vertex, vertexT *oldvertex, int *hashslot)
void qh_vertexridges_facet(vertexT *vertex, facetT *facet, setT **ridges)
void qh_copynonconvex(ridgeT *atridge)
void qh_renameridgevertex(ridgeT *ridge, vertexT *oldvertex, vertexT *newvertex)
void qh_maydropneighbor(facetT *facet)
void qh_mergeneighbors(facetT *facet1, facetT *facet2)
void qh_mergefacet(facetT *facet1, facetT *facet2, realT *mindist, realT *maxdist, boolT mergeapex)
void qh_tracemerge(facetT *facet1, facetT *facet2)
boolT qh_test_vneighbors(void)
void qh_mergecycle_ridges(facetT *samecycle, facetT *newfacet)
void qh_mergecycle_neighbors(facetT *samecycle, facetT *newfacet)
void qh_getmergeset(facetT *facetlist)
void qh_mergecycle_all(facetT *facetlist, boolT *wasmerge)
void qh_mergevertices(setT *vertices1, setT **vertices)
void qh_mergecycle_vneighbors(facetT *samecycle, facetT *newfacet)
void qh_mergeridges(facetT *facet1, facetT *facet2)
void qh_findbest_test(boolT testcentrum, facetT *facet, facetT *neighbor, facetT **bestfacet, realT *distp, realT *mindistp, realT *maxdistp)
void qh_merge_nonconvex(facetT *facet1, facetT *facet2, mergeType mergetype)
void qh_forcedmerges(boolT *wasmerge)
void qh_mergecycle(facetT *samecycle, facetT *newfacet)
void qh_appendmergeset(facetT *facet, facetT *neighbor, mergeType mergetype, realT *angle)
void qh_premerge(vertexT *apex, realT maxcentrum, realT maxangle)
void qh_getmergeset_initial(facetT *facetlist)
void qh_updatetested(facetT *facet1, facetT *facet2)
setT * qh_basevertices(facetT *samecycle)
void qh_mergevertex_del(vertexT *vertex, facetT *facet1, facetT *facet2)
void qh_all_merges(boolT othermerge, boolT vneighbors)
int qh_comparemerge(const void *p1, const void *p2)
boolT qh_checkzero(boolT testall)
int qh_merge_degenredundant(void)
void qh_degen_redundant_facet(facetT *facet)
setT * qh_neighbor_intersections(vertexT *vertex)
void qh_hashridge(setT *hashtable, int hashsize, ridgeT *ridge, vertexT *oldvertex)
void qh_degen_redundant_neighbors(facetT *facet, facetT *delfacet)
void qh_mergefacet2d(facetT *facet1, facetT *facet2)
boolT qh_reducevertices(void)
void qh_mergecycle_facets(facetT *samecycle, facetT *newfacet)
void qh_makeridges(facetT *facet)
void qh_renamevertex(vertexT *oldvertex, vertexT *newvertex, setT *ridges, facetT *oldfacet, facetT *neighborA)
void qh_mergevertex_neighbors(facetT *facet1, facetT *facet2)
vertexT * qh_find_newvertex(vertexT *oldvertex, setT *vertices, setT *ridges)
vertexT * qh_redundant_vertex(vertexT *vertex)
void qh_tracemerging(void)
setT * qh_vertexridges(vertexT *vertex)
void qh_willdelete(facetT *facet, facetT *replace)
void qh_newvertices(setT *vertices)
void qh_checkconnect(void)
boolT qh_remove_extravertices(facetT *facet)
void qh_postmerge(const char *reason, realT maxcentrum, realT maxangle, boolT vneighbors)
boolT qh_test_appendmerge(facetT *facet, facetT *neighbor)
vertexT * qh_rename_sharedvertex(vertexT *vertex, facetT *facet)