27 #define qh_ALGORITHMfault 0 35 #define qh_DATAfault 1 46 #define qh_DUPLICATEridge (facetT *)1L 57 #define qh_MERGEridge (facetT *)2L 77 #define FORALLfacet_( facetlist ) if (facetlist ) for ( facet=( facetlist ); facet && facet->next; facet= facet->next ) 89 #define FORALLnew_facets for ( newfacet=qh->newfacet_list;newfacet && newfacet->next;newfacet=newfacet->next ) 101 #define FORALLvertex_( vertexlist ) for (vertex=( vertexlist );vertex && vertex->next;vertex= vertex->next ) 113 #define FORALLvisible_facets for (visible=qh->visible_list; visible && visible->visible; visible= visible->next) 125 #define FORALLsame_(newfacet) for (same= newfacet->f.samecycle; same != newfacet; same= same->f.samecycle) 137 #define FORALLsame_cycle_(newfacet) \ 138 for (same= newfacet->f.samecycle; \ 139 same; same= (same == newfacet ? NULL : same->f.samecycle)) 156 #define FOREACHneighborA_(facet) FOREACHsetelement_(facetT, facet->neighbors, neighborA) 168 #define FOREACHvisible_(facets) FOREACHsetelement_(facetT, facets, visible) 180 #define FOREACHnewfacet_(facets) FOREACHsetelement_(facetT, facets, newfacet) 192 #define FOREACHvertexA_(vertices) FOREACHsetelement_(vertexT, vertices, vertexA) 205 #define FOREACHvertexreverse12_(vertices) FOREACHsetelementreverse12_(vertexT, vertices, vertex) 217 int qh_gethash(
qhT *
qh,
int hashsize,
setT *
set,
int size,
int firstindex,
void *skipelem);
226 setT *verticesB,
int *skipB,
boolT *same);
237 void qh_addhash(
void *newelem,
setT *hashtable,
int hashsize,
int hash);
void qh_findgood_all(qhT *qh, facetT *facetlist)
void qh_initbuild(qhT *qh)
void qh_vertexintersect(qhT *qh, setT **vertexsetA, setT *vertexsetB)
void qh_clearcenters(qhT *qh, qh_CENTER type)
void qh_vertexneighbors(qhT *qh)
void qh_addhash(void *newelem, setT *hashtable, int hashsize, int hash)
setT * qh_initialvertices(qhT *qh, int dim, setT *maxpoints, pointT *points, int numpoints)
int qh_newhashtable(qhT *qh, int newsize)
void qh_furthestnext(qhT *qh)
int qh_pointid(qhT *qh, pointT *point)
ridgeT * qh_newridge(qhT *qh)
void qh_removevertex(qhT *qh, vertexT *vertex)
boolT qh_checkflipped(qhT *qh, facetT *facet, realT *dist, boolT allerror)
void qh_updatevertices(qhT *qh)
void qh_makenewplanes(qhT *qh)
void qh_delvertex(qhT *qh, vertexT *vertex)
void qh_prependfacet(qhT *qh, facetT *facet, facetT **facetlist)
void qh_matchneighbor(qhT *qh, facetT *newfacet, int newskip, int hashsize, int *hashcount)
setT * qh_facet3vertex(qhT *qh, facetT *facet)
boolT qh_vertexsubset(setT *vertexsetA, setT *vertexsetB)
boolT qh_matchvertices(qhT *qh, int firstindex, setT *verticesA, int skipA, setT *verticesB, int *skipB, boolT *same)
facetT * qh_newfacet(qhT *qh)
facetT * qh_findbestfacet(qhT *qh, pointT *point, boolT bestoutside, realT *bestdist, boolT *isoutside)
void qh_check_bestdist(qhT *qh)
void qh_checkflipped_all(qhT *qh, facetT *facetlist)
void qh_outcoplanar(qhT *qh)
facetT * qh_findfacet_all(qhT *qh, pointT *point, realT *bestdist, boolT *isoutside, int *numpart)
void qh_triangulate(qhT *qh)
facetT * qh_makenew_simplicial(qhT *qh, facetT *visible, vertexT *apex, int *numnew)
void qh_printlists(qhT *qh)
void qh_setvoronoi_all(qhT *qh)
facetT * qh_makenewfacet(qhT *qh, setT *vertices, boolT toporient, facetT *facet)
void qh_triangulate_link(qhT *qh, facetT *oldfacetA, facetT *facetA, facetT *oldfacetB, facetT *facetB)
void qh_checkconvex(qhT *qh, facetT *facetlist, int fault)
void qh_triangulate_facet(qhT *qh, facetT *facetA, vertexT **first_vertex)
void qh_delridge(qhT *qh, ridgeT *ridge)
void qh_printhashtable(qhT *qh, FILE *fp)
pointT * qh_point(qhT *qh, int id)
void qh_check_point(qhT *qh, pointT *point, facetT *facet, realT *maxoutside, realT *maxdist, facetT **errfacet1, facetT **errfacet2)
void qh_point_add(qhT *qh, setT *set, pointT *point, void *elem)
void qh_furthestout(qhT *qh, facetT *facet)
void qh_checkvertex(qhT *qh, vertexT *vertex)
int qh_gethash(qhT *qh, int hashsize, setT *set, int size, int firstindex, void *skipelem)
ridgeT * qh_nextridge3d(ridgeT *atridge, facetT *facet, vertexT **vertexp)
void qh_createsimplex(qhT *qh, setT *vertices)
void qh_nearcoplanar(qhT *qh)
void qh_resetlists(qhT *qh, boolT stats, boolT resetVisible)
setT * qh_vertexintersect_new(qhT *qh, setT *vertexsetA, setT *vertexsetB)
void qh_deletevisible(qhT *qh)
void qh_check_points(qhT *qh)
void qh_appendfacet(qhT *qh, facetT *facet)
vertexT * qh_isvertex(pointT *point, setT *vertices)
void qh_infiniteloop(qhT *qh, facetT *facet)
void qh_triangulate_mirror(qhT *qh, facetT *facetA, facetT *facetB)
void qh_checkfacet(qhT *qh, facetT *facet, boolT newmerge, boolT *waserrorp)
void qh_matchduplicates(qhT *qh, facetT *atfacet, int atskip, int hashsize, int *hashcount)
void qh_check_maxout(qhT *qh)
vertexT * qh_makenewfacets(qhT *qh, pointT *point)
setT * qh_pointvertex(qhT *qh)
void qh_attachnewfacets(qhT *qh)
void qh_initialhull(qhT *qh, setT *vertices)
void qh_matchnewfacets(qhT *qh)
int qh_findgood(qhT *qh, facetT *facetlist, int goodhorizon)
void qh_check_dupridge(qhT *qh, facetT *facet1, realT dist1, facetT *facet2, realT dist2)
setT * qh_pointfacet(qhT *qh)
void qh_removefacet(qhT *qh, facetT *facet)
facetT * qh_makenew_nonsimplicial(qhT *qh, facetT *visible, vertexT *apex, int *numnew)
setT * qh_facetintersect(qhT *qh, facetT *facetA, facetT *facetB, int *skipAp, int *skipBp, int extra)
facetT * qh_findbestlower(qhT *qh, facetT *upperfacet, pointT *point, realT *bestdistp, int *numpart)
void qh_delfacet(qhT *qh, facetT *facet)
vertexT * qh_nearvertex(qhT *qh, facetT *facet, pointT *point, realT *bestdistp)
void qh_check_output(qhT *qh)
void qh_triangulate_null(qhT *qh, facetT *facetA)
void qh_appendvertex(qhT *qh, vertexT *vertex)
vertexT * qh_newvertex(qhT *qh, pointT *point)
void qh_checkpolygon(qhT *qh, facetT *facetlist)