libqhull.h
Go to the documentation of this file.
1 /*<html><pre> -<a href="qh-qhull.htm"
2  >-------------------------------</a><a name="TOP">-</a>
3 
4  libqhull.h
5  user-level header file for using qhull.a library
6 
7  see qh-qhull.htm, qhull_a.h
8 
9  Copyright (c) 1993-2015 The Geometry Center.
10  $Id: //main/2015/qhull/src/libqhull/libqhull.h#7 $$Change: 2066 $
11  $DateTime: 2016/01/18 19:29:17 $$Author: bbarber $
12 
13  NOTE: access to qh_qh is via the 'qh' macro. This allows
14  qh_qh to be either a pointer or a structure. An example
15  of using qh is "qh.DROPdim" which accesses the DROPdim
16  field of qh_qh. Similarly, access to qh_qhstat is via
17  the 'qhstat' macro.
18 
19  includes function prototypes for libqhull.c, geom.c, global.c, io.c, user.c
20 
21  use mem.h for mem.c
22  use qset.h for qset.c
23 
24  see unix.c for an example of using libqhull.h
25 
26  recompile qhull if you change this file
27 */
28 
29 #ifndef qhDEFlibqhull
30 #define qhDEFlibqhull 1
31 
32 /*=========================== -included files ==============*/
33 
34 /* user_r.h first for QHULL_CRTDBG */
35 #include "user.h" /* user definable constants (e.g., qh_QHpointer) */
36 
37 #include "mem.h" /* Needed qhT in libqhull_r.h. Here for compatibility */
38 #include "qset.h" /* Needed for QHULL_LIB_CHECK */
39 /* include stat_r.h after defining boolT. Needed for qhT in libqhull_r.h. Here for compatibility and statT */
40 
41 #include <setjmp.h>
42 #include <float.h>
43 #include <time.h>
44 #include <stdio.h>
45 
46 #if __MWERKS__ && __POWERPC__
47 #include <SIOUX.h>
48 #include <Files.h>
49 #include <Desk.h>
50 #endif
51 
52 #ifndef __STDC__
53 #ifndef __cplusplus
54 #if !_MSC_VER
55 #error Neither __STDC__ nor __cplusplus is defined. Please use strict ANSI C or C++ to compile
56 #error Qhull. You may need to turn off compiler extensions in your project configuration. If
57 #error your compiler is a standard C compiler, you can delete this warning from libqhull.h
58 #endif
59 #endif
60 #endif
61 
62 /*============ constants and basic types ====================*/
63 
64 extern const char qh_version[]; /* defined in global.c */
65 extern const char qh_version2[]; /* defined in global.c */
66 
67 /*-<a href="qh-geom.htm#TOC"
68  >--------------------------------</a><a name="coordT">-</a>
69 
70  coordT
71  coordinates and coefficients are stored as realT (i.e., double)
72 
73  notes:
74  Qhull works well if realT is 'float'. If so joggle (QJ) is not effective.
75 
76  Could use 'float' for data and 'double' for calculations (realT vs. coordT)
77  This requires many type casts, and adjusted error bounds.
78  Also C compilers may do expressions in double anyway.
79 */
80 #define coordT realT
81 
82 /*-<a href="qh-geom.htm#TOC"
83  >--------------------------------</a><a name="pointT">-</a>
84 
85  pointT
86  a point is an array of coordinates, usually qh.hull_dim
87  qh_pointid returns
88  qh_IDnone if point==0 or qh is undefined
89  qh_IDinterior for qh.interior_point
90  qh_IDunknown if point is neither in qh.first_point... nor qh.other_points
91 
92  notes:
93  qh.STOPcone and qh.STOPpoint assume that qh_IDunknown==-1 (other negative numbers indicate points)
94  qh_IDunknown is also returned by getid_() for unknown facet, ridge, or vertex
95 */
96 #define pointT coordT
97 typedef enum
98 {
100 }
101 qh_pointT;
102 
103 /*-<a href="qh-qhull.htm#TOC"
104  >--------------------------------</a><a name="flagT">-</a>
105 
106  flagT
107  Boolean flag as a bit
108 */
109 #define flagT unsigned int
110 
111 /*-<a href="qh-qhull.htm#TOC"
112  >--------------------------------</a><a name="boolT">-</a>
113 
114  boolT
115  boolean value, either True or False
116 
117  notes:
118  needed for portability
119  Use qh_False/qh_True as synonyms
120 */
121 #define boolT unsigned int
122 #ifdef False
123 #undef False
124 #endif
125 #ifdef True
126 #undef True
127 #endif
128 #define False 0
129 #define True 1
130 #define qh_False 0
131 #define qh_True 1
132 
133 #include "stat.h" /* after define of boolT */
134 
135 /*-<a href="qh-qhull.htm#TOC"
136  >--------------------------------</a><a name="CENTERtype">-</a>
137 
138  qh_CENTER
139  to distinguish facet->center
140 */
141 typedef enum
142 {
143  qh_ASnone = 0, /* If not MERGING and not VORONOI */
144  qh_ASvoronoi, /* Set by qh_clearcenters on qh_prepare_output, or if not MERGING and VORONOI */
145  qh_AScentrum /* If MERGING (assumed during merging) */
146 }
147 qh_CENTER;
148 
149 /*-<a href="qh-qhull.htm#TOC"
150  >--------------------------------</a><a name="qh_PRINT">-</a>
151 
152  qh_PRINT
153  output formats for printing (qh.PRINTout).
154  'Fa' 'FV' 'Fc' 'FC'
155 
156 
157  notes:
158  some of these names are similar to qhT names. The similar names are only
159  used in switch statements in qh_printbegin() etc.
160 */
161 typedef enum {qh_PRINTnone= 0,
162  qh_PRINTarea, qh_PRINTaverage, /* 'Fa' 'FV' 'Fc' 'FC' */
164  qh_PRINTfacets, qh_PRINTfacets_xridge, /* 'f' 'FF' 'G' 'FI' 'Fi' 'Fn' */
166  qh_PRINTnormals, qh_PRINTouter, qh_PRINTmaple, /* 'n' 'Fo' 'i' 'm' 'Fm' 'FM', 'o' */
168  qh_PRINToptions, qh_PRINTpointintersect, /* 'FO' 'Fp' 'FP' 'p' 'FQ' 'FS' */
170  qh_PRINTsummary, qh_PRINTtriangles, /* 'Fs' 'Ft' 'Fv' 'FN' 'Fx' */
173 
174 /*-<a href="qh-qhull.htm#TOC"
175  >--------------------------------</a><a name="qh_ALL">-</a>
176 
177  qh_ALL
178  argument flag for selecting everything
179 */
180 #define qh_ALL True
181 #define qh_NOupper True /* argument for qh_findbest */
182 #define qh_IScheckmax True /* argument for qh_findbesthorizon */
183 #define qh_ISnewfacets True /* argument for qh_findbest */
184 #define qh_RESETvisible True /* argument for qh_resetlists */
185 
186 /*-<a href="qh-qhull.htm#TOC"
187  >--------------------------------</a><a name="qh_ERR">-</a>
188 
189  qh_ERR
190  Qhull exit codes, for indicating errors
191  See: MSG_ERROR and MSG_WARNING [user.h]
192 */
193 #define qh_ERRnone 0 /* no error occurred during qhull */
194 #define qh_ERRinput 1 /* input inconsistency */
195 #define qh_ERRsingular 2 /* singular input data */
196 #define qh_ERRprec 3 /* precision error */
197 #define qh_ERRmem 4 /* insufficient memory, matches mem.h */
198 #define qh_ERRqhull 5 /* internal error detected, matches mem.h */
199 
200 /*-<a href="qh-qhull.htm#TOC"
201 >--------------------------------</a><a name="qh_FILEstderr">-</a>
202 
203 qh_FILEstderr
204 Fake stderr to distinguish error output from normal output
205 For C++ interface. Must redefine qh_fprintf_qhull
206 */
207 #define qh_FILEstderr ((FILE*)1)
208 
209 /* ============ -structures- ====================
210  each of the following structures is defined by a typedef
211  all realT and coordT fields occur at the beginning of a structure
212  (otherwise space may be wasted due to alignment)
213  define all flags together and pack into 32-bit number
214  DEFsetT is likewise defined in
215  mem.h and qset.h
216 */
217 
218 typedef struct vertexT vertexT;
219 typedef struct ridgeT ridgeT;
220 typedef struct facetT facetT;
221 #ifndef DEFsetT
222 #define DEFsetT 1
223 typedef struct setT setT; /* defined in qset.h */
224 #endif
225 
226 /*-<a href="qh-poly.htm#TOC"
227  >--------------------------------</a><a name="facetT">-</a>
228 
229  facetT
230  defines a facet
231 
232  notes:
233  qhull() generates the hull as a list of facets.
234 
235  topological information:
236  f.previous,next doubly-linked list of facets
237  f.vertices set of vertices
238  f.ridges set of ridges
239  f.neighbors set of neighbors
240  f.toporient True if facet has top-orientation (else bottom)
241 
242  geometric information:
243  f.offset,normal hyperplane equation
244  f.maxoutside offset to outer plane -- all points inside
245  f.center centrum for testing convexity
246  f.simplicial True if facet is simplicial
247  f.flipped True if facet does not include qh.interior_point
248 
249  for constructing hull:
250  f.visible True if facet on list of visible facets (will be deleted)
251  f.newfacet True if facet on list of newly created facets
252  f.coplanarset set of points coplanar with this facet
253  (includes near-inside points for later testing)
254  f.outsideset set of points outside of this facet
255  f.furthestdist distance to furthest point of outside set
256  f.visitid marks visited facets during a loop
257  f.replace replacement facet for to-be-deleted, visible facets
258  f.samecycle,newcycle cycle of facets for merging into horizon facet
259 
260  see below for other flags and fields
261 */
262 struct facetT {
263 #if !qh_COMPUTEfurthest
264  coordT furthestdist;/* distance to furthest point of outsideset */
265 #endif
266 #if qh_MAXoutside
267  coordT maxoutside; /* max computed distance of point to facet
268  Before QHULLfinished this is an approximation
269  since maxdist not always set for mergefacet
270  Actual outer plane is +DISTround and
271  computed outer plane is +2*DISTround */
272 #endif
273  coordT offset; /* exact offset of hyperplane from origin */
274  coordT *normal; /* normal of hyperplane, hull_dim coefficients */
275  /* if tricoplanar, shared with a neighbor */
276  union { /* in order of testing */
277  realT area; /* area of facet, only in io.c if ->isarea */
278  facetT *replace; /* replacement facet if ->visible and NEWfacets
279  is NULL only if qh_mergedegen_redundant or interior */
280  facetT *samecycle; /* cycle of facets from the same visible/horizon intersection,
281  if ->newfacet */
282  facetT *newcycle; /* in horizon facet, current samecycle of new facets */
283  facetT *trivisible; /* visible facet for ->tricoplanar facets during qh_triangulate() */
284  facetT *triowner; /* owner facet for ->tricoplanar, !isarea facets w/ ->keepcentrum */
285  }f;
286  coordT *center; /* set according to qh.CENTERtype */
287  /* qh_ASnone: no center (not MERGING) */
288  /* qh_AScentrum: centrum for testing convexity (qh_getcentrum) */
289  /* assumed qh_AScentrum while merging */
290  /* qh_ASvoronoi: Voronoi center (qh_facetcenter) */
291  /* after constructing the hull, it may be changed (qh_clearcenter) */
292  /* if tricoplanar and !keepcentrum, shared with a neighbor */
293  facetT *previous; /* previous facet in the facet_list */
294  facetT *next; /* next facet in the facet_list */
295  setT *vertices; /* vertices for this facet, inverse sorted by ID
296  if simplicial, 1st vertex was apex/furthest */
297  setT *ridges; /* explicit ridges for nonsimplicial facets.
298  for simplicial facets, neighbors define the ridges */
299  setT *neighbors; /* neighbors of the facet. If simplicial, the kth
300  neighbor is opposite the kth vertex, and the first
301  neighbor is the horizon facet for the first vertex*/
302  setT *outsideset; /* set of points outside this facet
303  if non-empty, last point is furthest
304  if NARROWhull, includes coplanars for partitioning*/
305  setT *coplanarset; /* set of points coplanar with this facet
306  > qh.min_vertex and <= facet->max_outside
307  a point is assigned to the furthest facet
308  if non-empty, last point is furthest away */
309  unsigned visitid; /* visit_id, for visiting all neighbors,
310  all uses are independent */
311  unsigned id; /* unique identifier from qh.facet_id */
312  unsigned nummerge:9; /* number of merges */
313 #define qh_MAXnummerge 511 /* 2^9-1, 32 flags total, see "flags:" in io.c */
314  flagT tricoplanar:1; /* True if TRIangulate and simplicial and coplanar with a neighbor */
315  /* all tricoplanars share the same apex */
316  /* all tricoplanars share the same ->center, ->normal, ->offset, ->maxoutside */
317  /* ->keepcentrum is true for the owner. It has the ->coplanareset */
318  /* if ->degenerate, does not span facet (one logical ridge) */
319  /* during qh_triangulate, f.trivisible points to original facet */
320  flagT newfacet:1; /* True if facet on qh.newfacet_list (new or merged) */
321  flagT visible:1; /* True if visible facet (will be deleted) */
322  flagT toporient:1; /* True if created with top orientation
323  after merging, use ridge orientation */
324  flagT simplicial:1;/* True if simplicial facet, ->ridges may be implicit */
325  flagT seen:1; /* used to perform operations only once, like visitid */
326  flagT seen2:1; /* used to perform operations only once, like visitid */
327  flagT flipped:1; /* True if facet is flipped */
328  flagT upperdelaunay:1; /* True if facet is upper envelope of Delaunay triangulation */
329  flagT notfurthest:1; /* True if last point of outsideset is not furthest*/
330 
331 /*-------- flags primarily for output ---------*/
332  flagT good:1; /* True if a facet marked good for output */
333  flagT isarea:1; /* True if facet->f.area is defined */
334 
335 /*-------- flags for merging ------------------*/
336  flagT dupridge:1; /* True if duplicate ridge in facet */
337  flagT mergeridge:1; /* True if facet or neighbor contains a qh_MERGEridge
338  ->normal defined (also defined for mergeridge2) */
339  flagT mergeridge2:1; /* True if neighbor contains a qh_MERGEridge (mark_dupridges */
340  flagT coplanar:1; /* True if horizon facet is coplanar at last use */
341  flagT mergehorizon:1; /* True if will merge into horizon (->coplanar) */
342  flagT cycledone:1;/* True if mergecycle_all already done */
343  flagT tested:1; /* True if facet convexity has been tested (false after merge */
344  flagT keepcentrum:1; /* True if keep old centrum after a merge, or marks owner for ->tricoplanar */
345  flagT newmerge:1; /* True if facet is newly merged for reducevertices */
346  flagT degenerate:1; /* True if facet is degenerate (degen_mergeset or ->tricoplanar) */
347  flagT redundant:1; /* True if facet is redundant (degen_mergeset) */
348 };
349 
350 
351 /*-<a href="qh-poly.htm#TOC"
352  >--------------------------------</a><a name="ridgeT">-</a>
353 
354  ridgeT
355  defines a ridge
356 
357  notes:
358  a ridge is hull_dim-1 simplex between two neighboring facets. If the
359  facets are non-simplicial, there may be more than one ridge between
360  two facets. E.G. a 4-d hypercube has two triangles between each pair
361  of neighboring facets.
362 
363  topological information:
364  vertices a set of vertices
365  top,bottom neighboring facets with orientation
366 
367  geometric information:
368  tested True if ridge is clearly convex
369  nonconvex True if ridge is non-convex
370 */
371 struct ridgeT {
372  setT *vertices; /* vertices belonging to this ridge, inverse sorted by ID
373  NULL if a degen ridge (matchsame) */
374  facetT *top; /* top facet this ridge is part of */
375  facetT *bottom; /* bottom facet this ridge is part of */
376  unsigned id; /* unique identifier. Same size as vertex_id and ridge_id */
377  flagT seen:1; /* used to perform operations only once */
378  flagT tested:1; /* True when ridge is tested for convexity */
379  flagT nonconvex:1; /* True if getmergeset detected a non-convex neighbor
380  only one ridge between neighbors may have nonconvex */
381 };
382 
383 /*-<a href="qh-poly.htm#TOC"
384  >--------------------------------</a><a name="vertexT">-</a>
385 
386  vertexT
387  defines a vertex
388 
389  topological information:
390  next,previous doubly-linked list of all vertices
391  neighbors set of adjacent facets (only if qh.VERTEXneighbors)
392 
393  geometric information:
394  point array of DIM3 coordinates
395 */
396 struct vertexT {
397  vertexT *next; /* next vertex in vertex_list */
398  vertexT *previous; /* previous vertex in vertex_list */
399  pointT *point; /* hull_dim coordinates (coordT) */
400  setT *neighbors; /* neighboring facets of vertex, qh_vertexneighbors()
401  inits in io.c or after first merge */
402  unsigned id; /* unique identifier. Same size as qh.vertex_id and qh.ridge_id */
403  unsigned visitid; /* for use with qh.vertex_visit, size must match */
404  flagT seen:1; /* used to perform operations only once */
405  flagT seen2:1; /* another seen flag */
406  flagT delridge:1; /* vertex was part of a deleted ridge */
407  flagT deleted:1; /* true if vertex on qh.del_vertices */
408  flagT newlist:1; /* true if vertex on qh.newvertex_list */
409 };
410 
411 /*======= -global variables -qh ============================*/
412 
413 /*-<a href="qh-globa.htm#TOC"
414  >--------------------------------</a><a name="qh">-</a>
415 
416  qh
417  all global variables for qhull are in qh, qhmem, and qhstat
418 
419  notes:
420  qhmem is defined in mem.h, qhstat is defined in stat.h, qhrbox is defined in rboxpoints.h
421  Access to qh_qh is via the "qh" macro. See qh_QHpointer in user.h
422 
423  All global variables for qhull are in qh, qhmem, and qhstat
424  qh must be unique for each instance of qhull
425  qhstat may be shared between qhull instances.
426  qhmem may be shared across multiple instances of Qhull.
427  Rbox uses global variables rbox_inuse and rbox, but does not persist data across calls.
428 
429  Qhull is not multi-threaded. Global state could be stored in thread-local storage.
430 
431  QHULL_LIB_CHECK checks that a program and the corresponding
432  qhull library were built with the same type of header files.
433 */
434 
435 typedef struct qhT qhT;
436 
437 #define QHULL_NON_REENTRANT 0
438 #define QHULL_QH_POINTER 1
439 #define QHULL_REENTRANT 2
440 
441 #if qh_QHpointer_dllimport
442 #define qh qh_qh->
443 __declspec(dllimport) extern qhT *qh_qh; /* allocated in global.c */
444 #define QHULL_LIB_TYPE QHULL_QH_POINTER
445 
446 #elif qh_QHpointer
447 #define qh qh_qh->
448 extern qhT *qh_qh; /* allocated in global.c */
449 #define QHULL_LIB_TYPE QHULL_QH_POINTER
450 
451 #elif qh_dllimport
452 #define qh qh_qh.
453 __declspec(dllimport) extern qhT qh_qh; /* allocated in global.c */
454 #define QHULL_LIB_TYPE QHULL_NON_REENTRANT
455 
456 #else
457 #define qh qh_qh.
458 extern qhT qh_qh;
459 #define QHULL_LIB_TYPE QHULL_NON_REENTRANT
460 #endif
461 
462 #define QHULL_LIB_CHECK qh_lib_check(QHULL_LIB_TYPE, sizeof(qhT), sizeof(vertexT), sizeof(ridgeT), sizeof(facetT), sizeof(setT), sizeof(qhmemT));
463 #define QHULL_LIB_CHECK_RBOX qh_lib_check(QHULL_LIB_TYPE, sizeof(qhT), sizeof(vertexT), sizeof(ridgeT), sizeof(facetT), 0, 0);
464 
465 struct qhT {
466 
467 /*-<a href="qh-globa.htm#TOC"
468  >--------------------------------</a><a name="qh-const">-</a>
469 
470  qh constants
471  configuration flags and constants for Qhull
472 
473  notes:
474  The user configures Qhull by defining flags. They are
475  copied into qh by qh_setflags(). qh-quick.htm#options defines the flags.
476 */
477  boolT ALLpoints; /* true 'Qs' if search all points for initial simplex */
478  boolT ANGLEmerge; /* true 'Qa' if sort potential merges by angle */
479  boolT APPROXhull; /* true 'Wn' if MINoutside set */
480  realT MINoutside; /* 'Wn' min. distance for an outside point */
481  boolT ANNOTATEoutput; /* true 'Ta' if annotate output with message codes */
482  boolT ATinfinity; /* true 'Qz' if point num_points-1 is "at-infinity"
483  for improving precision in Delaunay triangulations */
484  boolT AVOIDold; /* true 'Q4' if avoid old->new merges */
485  boolT BESToutside; /* true 'Qf' if partition points into best outsideset */
486  boolT CDDinput; /* true 'Pc' if input uses CDD format (1.0/offset first) */
487  boolT CDDoutput; /* true 'PC' if print normals in CDD format (offset first) */
488  boolT CHECKfrequently; /* true 'Tc' if checking frequently */
489  realT premerge_cos; /* 'A-n' cos_max when pre merging */
490  realT postmerge_cos; /* 'An' cos_max when post merging */
491  boolT DELAUNAY; /* true 'd' if computing DELAUNAY triangulation */
492  boolT DOintersections; /* true 'Gh' if print hyperplane intersections */
493  int DROPdim; /* drops dim 'GDn' for 4-d -> 3-d output */
494  boolT FORCEoutput; /* true 'Po' if forcing output despite degeneracies */
495  int GOODpoint; /* 1+n for 'QGn', good facet if visible/not(-) from point n*/
496  pointT *GOODpointp; /* the actual point */
497  boolT GOODthreshold; /* true if qh.lower_threshold/upper_threshold defined
498  false if qh.SPLITthreshold */
499  int GOODvertex; /* 1+n, good facet if vertex for point n */
500  pointT *GOODvertexp; /* the actual point */
501  boolT HALFspace; /* true 'Hn,n,n' if halfspace intersection */
502  boolT ISqhullQh; /* Set by Qhull.cpp on initialization */
503  int IStracing; /* trace execution, 0=none, 1=least, 4=most, -1=events */
504  int KEEParea; /* 'PAn' number of largest facets to keep */
505  boolT KEEPcoplanar; /* true 'Qc' if keeping nearest facet for coplanar points */
506  boolT KEEPinside; /* true 'Qi' if keeping nearest facet for inside points
507  set automatically if 'd Qc' */
508  int KEEPmerge; /* 'PMn' number of facets to keep with most merges */
509  realT KEEPminArea; /* 'PFn' minimum facet area to keep */
510  realT MAXcoplanar; /* 'Un' max distance below a facet to be coplanar*/
511  boolT MERGEexact; /* true 'Qx' if exact merges (coplanar, degen, dupridge, flipped) */
512  boolT MERGEindependent; /* true 'Q2' if merging independent sets */
513  boolT MERGING; /* true if exact-, pre- or post-merging, with angle and centrum tests */
514  realT premerge_centrum; /* 'C-n' centrum_radius when pre merging. Default is round-off */
515  realT postmerge_centrum; /* 'Cn' centrum_radius when post merging. Default is round-off */
516  boolT MERGEvertices; /* true 'Q3' if merging redundant vertices */
517  realT MINvisible; /* 'Vn' min. distance for a facet to be visible */
518  boolT NOnarrow; /* true 'Q10' if no special processing for narrow distributions */
519  boolT NOnearinside; /* true 'Q8' if ignore near-inside points when partitioning */
520  boolT NOpremerge; /* true 'Q0' if no defaults for C-0 or Qx */
521  boolT NOwide; /* true 'Q12' if no error on wide merge due to duplicate ridge */
522  boolT ONLYgood; /* true 'Qg' if process points with good visible or horizon facets */
523  boolT ONLYmax; /* true 'Qm' if only process points that increase max_outside */
524  boolT PICKfurthest; /* true 'Q9' if process furthest of furthest points*/
525  boolT POSTmerge; /* true if merging after buildhull (Cn or An) */
526  boolT PREmerge; /* true if merging during buildhull (C-n or A-n) */
527  /* NOTE: some of these names are similar to qh_PRINT names */
528  boolT PRINTcentrums; /* true 'Gc' if printing centrums */
529  boolT PRINTcoplanar; /* true 'Gp' if printing coplanar points */
530  int PRINTdim; /* print dimension for Geomview output */
531  boolT PRINTdots; /* true 'Ga' if printing all points as dots */
532  boolT PRINTgood; /* true 'Pg' if printing good facets */
533  boolT PRINTinner; /* true 'Gi' if printing inner planes */
534  boolT PRINTneighbors; /* true 'PG' if printing neighbors of good facets */
535  boolT PRINTnoplanes; /* true 'Gn' if printing no planes */
536  boolT PRINToptions1st; /* true 'FO' if printing options to stderr */
537  boolT PRINTouter; /* true 'Go' if printing outer planes */
538  boolT PRINTprecision; /* false 'Pp' if not reporting precision problems */
539  qh_PRINT PRINTout[qh_PRINTEND]; /* list of output formats to print */
540  boolT PRINTridges; /* true 'Gr' if print ridges */
541  boolT PRINTspheres; /* true 'Gv' if print vertices as spheres */
542  boolT PRINTstatistics; /* true 'Ts' if printing statistics to stderr */
543  boolT PRINTsummary; /* true 's' if printing summary to stderr */
544  boolT PRINTtransparent; /* true 'Gt' if print transparent outer ridges */
545  boolT PROJECTdelaunay; /* true if DELAUNAY, no readpoints() and
546  need projectinput() for Delaunay in qh_init_B */
547  int PROJECTinput; /* number of projected dimensions 'bn:0Bn:0' */
548  boolT QUICKhelp; /* true if quick help message for degen input */
549  boolT RANDOMdist; /* true if randomly change distplane and setfacetplane */
550  realT RANDOMfactor; /* maximum random perturbation */
551  realT RANDOMa; /* qh_randomfactor is randr * RANDOMa + RANDOMb */
553  boolT RANDOMoutside; /* true if select a random outside point */
554  int REPORTfreq; /* buildtracing reports every n facets */
555  int REPORTfreq2; /* tracemerging reports every REPORTfreq/2 facets */
556  int RERUN; /* 'TRn' rerun qhull n times (qh.build_cnt) */
557  int ROTATErandom; /* 'QRn' seed, 0 time, >= rotate input */
558  boolT SCALEinput; /* true 'Qbk' if scaling input */
559  boolT SCALElast; /* true 'Qbb' if scale last coord to max prev coord */
560  boolT SETroundoff; /* true 'E' if qh.DISTround is predefined */
561  boolT SKIPcheckmax; /* true 'Q5' if skip qh_check_maxout */
562  boolT SKIPconvex; /* true 'Q6' if skip convexity testing during pre-merge */
563  boolT SPLITthresholds; /* true if upper_/lower_threshold defines a region
564  used only for printing (!for qh.ONLYgood) */
565  int STOPcone; /* 'TCn' 1+n for stopping after cone for point n */
566  /* also used by qh_build_withresart for err exit*/
567  int STOPpoint; /* 'TVn' 'TV-n' 1+n for stopping after/before(-)
568  adding point n */
569  int TESTpoints; /* 'QTn' num of test points after qh.num_points. Test points always coplanar. */
570  boolT TESTvneighbors; /* true 'Qv' if test vertex neighbors at end */
571  int TRACElevel; /* 'Tn' conditional IStracing level */
572  int TRACElastrun; /* qh.TRACElevel applies to last qh.RERUN */
573  int TRACEpoint; /* 'TPn' start tracing when point n is a vertex */
574  realT TRACEdist; /* 'TWn' start tracing when merge distance too big */
575  int TRACEmerge; /* 'TMn' start tracing before this merge */
576  boolT TRIangulate; /* true 'Qt' if triangulate non-simplicial facets */
577  boolT TRInormals; /* true 'Q11' if triangulate duplicates ->normal and ->center (sets Qt) */
578  boolT UPPERdelaunay; /* true 'Qu' if computing furthest-site Delaunay */
579  boolT USEstdout; /* true 'Tz' if using stdout instead of stderr */
580  boolT VERIFYoutput; /* true 'Tv' if verify output at end of qhull */
581  boolT VIRTUALmemory; /* true 'Q7' if depth-first processing in buildhull */
582  boolT VORONOI; /* true 'v' if computing Voronoi diagram */
583 
584  /*--------input constants ---------*/
585  realT AREAfactor; /* 1/(hull_dim-1)! for converting det's to area */
586  boolT DOcheckmax; /* true if calling qh_check_maxout (qh_initqhull_globals) */
587  char *feasible_string; /* feasible point 'Hn,n,n' for halfspace intersection */
588  coordT *feasible_point; /* as coordinates, both malloc'd */
589  boolT GETarea; /* true 'Fa', 'FA', 'FS', 'PAn', 'PFn' if compute facet area/Voronoi volume in io.c */
590  boolT KEEPnearinside; /* true if near-inside points in coplanarset */
591  int hull_dim; /* dimension of hull, set by initbuffers */
592  int input_dim; /* dimension of input, set by initbuffers */
593  int num_points; /* number of input points */
594  pointT *first_point; /* array of input points, see POINTSmalloc */
595  boolT POINTSmalloc; /* true if qh.first_point/num_points allocated */
596  pointT *input_points; /* copy of original qh.first_point for input points for qh_joggleinput */
597  boolT input_malloc; /* true if qh.input_points malloc'd */
598  char qhull_command[256];/* command line that invoked this program */
599  int qhull_commandsiz2; /* size of qhull_command at qh_clear_outputflags */
600  char rbox_command[256]; /* command line that produced the input points */
601  char qhull_options[512];/* descriptive list of options */
602  int qhull_optionlen; /* length of last line */
603  int qhull_optionsiz; /* size of qhull_options at qh_build_withrestart */
604  int qhull_optionsiz2; /* size of qhull_options at qh_clear_outputflags */
605  int run_id; /* non-zero, random identifier for this instance of qhull */
606  boolT VERTEXneighbors; /* true if maintaining vertex neighbors */
607  boolT ZEROcentrum; /* true if 'C-0' or 'C-0 Qx'. sets ZEROall_ok */
608  realT *upper_threshold; /* don't print if facet->normal[k]>=upper_threshold[k]
609  must set either GOODthreshold or SPLITthreshold
610  if Delaunay, default is 0.0 for upper envelope */
611  realT *lower_threshold; /* don't print if facet->normal[k] <=lower_threshold[k] */
612  realT *upper_bound; /* scale point[k] to new upper bound */
613  realT *lower_bound; /* scale point[k] to new lower bound
614  project if both upper_ and lower_bound == 0 */
615 
616 /*-<a href="qh-globa.htm#TOC"
617  >--------------------------------</a><a name="qh-prec">-</a>
618 
619  qh precision constants
620  precision constants for Qhull
621 
622  notes:
623  qh_detroundoff() computes the maximum roundoff error for distance
624  and other computations. It also sets default values for the
625  qh constants above.
626 */
627  realT ANGLEround; /* max round off error for angles */
628  realT centrum_radius; /* max centrum radius for convexity (roundoff added) */
629  realT cos_max; /* max cosine for convexity (roundoff added) */
630  realT DISTround; /* max round off error for distances, 'E' overrides qh_distround() */
631  realT MAXabs_coord; /* max absolute coordinate */
632  realT MAXlastcoord; /* max last coordinate for qh_scalelast */
633  realT MAXsumcoord; /* max sum of coordinates */
634  realT MAXwidth; /* max rectilinear width of point coordinates */
635  realT MINdenom_1; /* min. abs. value for 1/x */
636  realT MINdenom; /* use divzero if denominator < MINdenom */
637  realT MINdenom_1_2; /* min. abs. val for 1/x that allows normalization */
638  realT MINdenom_2; /* use divzero if denominator < MINdenom_2 */
639  realT MINlastcoord; /* min. last coordinate for qh_scalelast */
640  boolT NARROWhull; /* set in qh_initialhull if angle < qh_MAXnarrow */
641  realT *NEARzero; /* hull_dim array for near zero in gausselim */
642  realT NEARinside; /* keep points for qh_check_maxout if close to facet */
643  realT ONEmerge; /* max distance for merging simplicial facets */
644  realT outside_err; /* application's epsilon for coplanar points
645  qh_check_bestdist() qh_check_points() reports error if point outside */
646  realT WIDEfacet; /* size of wide facet for skipping ridge in
647  area computation and locking centrum */
648 
649 /*-<a href="qh-globa.htm#TOC"
650  >--------------------------------</a><a name="qh-codetern">-</a>
651 
652  qh internal constants
653  internal constants for Qhull
654 */
655  char qhull[sizeof("qhull")]; /* "qhull" for checking ownership while debugging */
656  jmp_buf errexit; /* exit label for qh_errexit, defined by setjmp() and NOerrexit */
657  char jmpXtra[40]; /* extra bytes in case jmp_buf is defined wrong by compiler */
658  jmp_buf restartexit; /* restart label for qh_errexit, defined by setjmp() and ALLOWrestart */
659  char jmpXtra2[40]; /* extra bytes in case jmp_buf is defined wrong by compiler*/
660  FILE *fin; /* pointer to input file, init by qh_initqhull_start2 */
661  FILE *fout; /* pointer to output file */
662  FILE *ferr; /* pointer to error file */
663  pointT *interior_point; /* center point of the initial simplex*/
664  int normal_size; /* size in bytes for facet normals and point coords*/
665  int center_size; /* size in bytes for Voronoi centers */
666  int TEMPsize; /* size for small, temporary sets (in quick mem) */
667 
668 /*-<a href="qh-globa.htm#TOC"
669  >--------------------------------</a><a name="qh-lists">-</a>
670 
671  qh facet and vertex lists
672  defines lists of facets, new facets, visible facets, vertices, and
673  new vertices. Includes counts, next ids, and trace ids.
674  see:
675  qh_resetlists()
676 */
677  facetT *facet_list; /* first facet */
678  facetT *facet_tail; /* end of facet_list (dummy facet) */
679  facetT *facet_next; /* next facet for buildhull()
680  previous facets do not have outside sets
681  NARROWhull: previous facets may have coplanar outside sets for qh_outcoplanar */
682  facetT *newfacet_list; /* list of new facets to end of facet_list */
683  facetT *visible_list; /* list of visible facets preceding newfacet_list,
684  facet->visible set */
685  int num_visible; /* current number of visible facets */
686  unsigned tracefacet_id; /* set at init, then can print whenever */
687  facetT *tracefacet; /* set in newfacet/mergefacet, undone in delfacet*/
688  unsigned tracevertex_id; /* set at buildtracing, can print whenever */
689  vertexT *tracevertex; /* set in newvertex, undone in delvertex*/
690  vertexT *vertex_list; /* list of all vertices, to vertex_tail */
691  vertexT *vertex_tail; /* end of vertex_list (dummy vertex) */
692  vertexT *newvertex_list; /* list of vertices in newfacet_list, to vertex_tail
693  all vertices have 'newlist' set */
694  int num_facets; /* number of facets in facet_list
695  includes visible faces (num_visible) */
696  int num_vertices; /* number of vertices in facet_list */
697  int num_outside; /* number of points in outsidesets (for tracing and RANDOMoutside)
698  includes coplanar outsideset points for NARROWhull/qh_outcoplanar() */
699  int num_good; /* number of good facets (after findgood_all) */
700  unsigned facet_id; /* ID of next, new facet from newfacet() */
701  unsigned ridge_id; /* ID of next, new ridge from newridge() */
702  unsigned vertex_id; /* ID of next, new vertex from newvertex() */
703 
704 /*-<a href="qh-globa.htm#TOC"
705  >--------------------------------</a><a name="qh-var">-</a>
706 
707  qh global variables
708  defines minimum and maximum distances, next visit ids, several flags,
709  and other global variables.
710  initialize in qh_initbuild or qh_maxmin if used in qh_buildhull
711 */
712  unsigned long hulltime; /* ignore time to set up input and randomize */
713  /* use unsigned to avoid wrap-around errors */
714  boolT ALLOWrestart; /* true if qh_precision can use qh.restartexit */
715  int build_cnt; /* number of calls to qh_initbuild */
716  qh_CENTER CENTERtype; /* current type of facet->center, qh_CENTER */
717  int furthest_id; /* pointid of furthest point, for tracing */
718  facetT *GOODclosest; /* closest facet to GOODthreshold in qh_findgood */
719  boolT hasAreaVolume; /* true if totarea, totvol was defined by qh_getarea */
720  boolT hasTriangulation; /* true if triangulation created by qh_triangulate */
721  realT JOGGLEmax; /* set 'QJn' if randomly joggle input */
722  boolT maxoutdone; /* set qh_check_maxout(), cleared by qh_addpoint() */
723  realT max_outside; /* maximum distance from a point to a facet,
724  before roundoff, not simplicial vertices
725  actual outer plane is +DISTround and
726  computed outer plane is +2*DISTround */
727  realT max_vertex; /* maximum distance (>0) from vertex to a facet,
728  before roundoff, due to a merge */
729  realT min_vertex; /* minimum distance (<0) from vertex to a facet,
730  before roundoff, due to a merge
731  if qh.JOGGLEmax, qh_makenewplanes sets it
732  recomputed if qh.DOcheckmax, default -qh.DISTround */
733  boolT NEWfacets; /* true while visible facets invalid due to new or merge
734  from makecone/attachnewfacets to deletevisible */
735  boolT findbestnew; /* true if partitioning calls qh_findbestnew */
736  boolT findbest_notsharp; /* true if new facets are at least 90 degrees */
737  boolT NOerrexit; /* true if qh.errexit is not available, cleared after setjmp */
738  realT PRINTcradius; /* radius for printing centrums */
739  realT PRINTradius; /* radius for printing vertex spheres and points */
740  boolT POSTmerging; /* true when post merging */
741  int printoutvar; /* temporary variable for qh_printbegin, etc. */
742  int printoutnum; /* number of facets printed */
743  boolT QHULLfinished; /* True after qhull() is finished */
744  realT totarea; /* 'FA': total facet area computed by qh_getarea, hasAreaVolume */
745  realT totvol; /* 'FA': total volume computed by qh_getarea, hasAreaVolume */
746  unsigned int visit_id; /* unique ID for searching neighborhoods, */
747  unsigned int vertex_visit; /* unique ID for searching vertices, reset with qh_buildtracing */
748  boolT ZEROall_ok; /* True if qh_checkzero always succeeds */
749  boolT WAScoplanar; /* True if qh_partitioncoplanar (qh_check_maxout) */
750 
751 /*-<a href="qh-globa.htm#TOC"
752  >--------------------------------</a><a name="qh-set">-</a>
753 
754  qh global sets
755  defines sets for merging, initial simplex, hashing, extra input points,
756  and deleted vertices
757 */
758  setT *facet_mergeset; /* temporary set of merges to be done */
759  setT *degen_mergeset; /* temporary set of degenerate and redundant merges */
760  setT *hash_table; /* hash table for matching ridges in qh_matchfacets
761  size is setsize() */
762  setT *other_points; /* additional points */
763  setT *del_vertices; /* vertices to partition and delete with visible
764  facets. Have deleted set for checkfacet */
765 
766 /*-<a href="qh-globa.htm#TOC"
767  >--------------------------------</a><a name="qh-buf">-</a>
768 
769  qh global buffers
770  defines buffers for maxtrix operations, input, and error messages
771 */
772  coordT *gm_matrix; /* (dim+1)Xdim matrix for geom.c */
773  coordT **gm_row; /* array of gm_matrix rows */
774  char* line; /* malloc'd input line of maxline+1 chars */
775  int maxline;
776  coordT *half_space; /* malloc'd input array for halfspace (qh normal_size+coordT) */
777  coordT *temp_malloc; /* malloc'd input array for points */
778 
779 /*-<a href="qh-globa.htm#TOC"
780  >--------------------------------</a><a name="qh-static">-</a>
781 
782  qh static variables
783  defines static variables for individual functions
784 
785  notes:
786  do not use 'static' within a function. Multiple instances of qhull
787  may exist.
788 
789  do not assume zero initialization, 'QPn' may cause a restart
790 */
791  boolT ERREXITcalled; /* true during qh_errexit (prevents duplicate calls */
792  boolT firstcentrum; /* for qh_printcentrum */
793  boolT old_randomdist; /* save RANDOMdist flag during io, tracing, or statistics */
794  setT *coplanarfacetset; /* set of coplanar facets for searching qh_findbesthorizon() */
795  realT last_low; /* qh_scalelast parameters for qh_setdelaunay */
798  unsigned lastreport; /* for qh_buildtracing */
799  int mergereport; /* for qh_tracemerging */
800  qhstatT *old_qhstat; /* for saving qh_qhstat in save_qhull() and UsingLibQhull. Free with qh_free() */
801  setT *old_tempstack; /* for saving qhmem.tempstack in save_qhull */
802  int ridgeoutnum; /* number of ridges for 4OFF output (qh_printbegin,etc) */
803 };
804 
805 /*=========== -macros- =========================*/
806 
807 /*-<a href="qh-poly.htm#TOC"
808  >--------------------------------</a><a name="otherfacet_">-</a>
809 
810  otherfacet_(ridge, facet)
811  return neighboring facet for a ridge in facet
812 */
813 #define otherfacet_(ridge, facet) \
814  (((ridge)->top == (facet)) ? (ridge)->bottom : (ridge)->top)
815 
816 /*-<a href="qh-poly.htm#TOC"
817  >--------------------------------</a><a name="getid_">-</a>
818 
819  getid_(p)
820  return int ID for facet, ridge, or vertex
821  return qh_IDunknown(-1) if NULL
822 */
823 #define getid_(p) ((p) ? (int)((p)->id) : qh_IDunknown)
824 
825 /*============== FORALL macros ===================*/
826 
827 /*-<a href="qh-poly.htm#TOC"
828  >--------------------------------</a><a name="FORALLfacets">-</a>
829 
830  FORALLfacets { ... }
831  assign 'facet' to each facet in qh.facet_list
832 
833  notes:
834  uses 'facetT *facet;'
835  assumes last facet is a sentinel
836 
837  see:
838  FORALLfacet_( facetlist )
839 */
840 #define FORALLfacets for (facet=qh facet_list;facet && facet->next;facet=facet->next)
841 
842 /*-<a href="qh-poly.htm#TOC"
843  >--------------------------------</a><a name="FORALLpoints">-</a>
844 
845  FORALLpoints { ... }
846  assign 'point' to each point in qh.first_point, qh.num_points
847 
848  declare:
849  coordT *point, *pointtemp;
850 */
851 #define FORALLpoints FORALLpoint_(qh first_point, qh num_points)
852 
853 /*-<a href="qh-poly.htm#TOC"
854  >--------------------------------</a><a name="FORALLpoint_">-</a>
855 
856  FORALLpoint_( points, num) { ... }
857  assign 'point' to each point in points array of num points
858 
859  declare:
860  coordT *point, *pointtemp;
861 */
862 #define FORALLpoint_(points, num) for (point= (points), \
863  pointtemp= (points)+qh hull_dim*(num); point < pointtemp; point += qh hull_dim)
864 
865 /*-<a href="qh-poly.htm#TOC"
866  >--------------------------------</a><a name="FORALLvertices">-</a>
867 
868  FORALLvertices { ... }
869  assign 'vertex' to each vertex in qh.vertex_list
870 
871  declare:
872  vertexT *vertex;
873 
874  notes:
875  assumes qh.vertex_list terminated with a sentinel
876 */
877 #define FORALLvertices for (vertex=qh vertex_list;vertex && vertex->next;vertex= vertex->next)
878 
879 /*-<a href="qh-poly.htm#TOC"
880  >--------------------------------</a><a name="FOREACHfacet_">-</a>
881 
882  FOREACHfacet_( facets ) { ... }
883  assign 'facet' to each facet in facets
884 
885  declare:
886  facetT *facet, **facetp;
887 
888  see:
889  <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
890 */
891 #define FOREACHfacet_(facets) FOREACHsetelement_(facetT, facets, facet)
892 
893 /*-<a href="qh-poly.htm#TOC"
894  >--------------------------------</a><a name="FOREACHneighbor_">-</a>
895 
896  FOREACHneighbor_( facet ) { ... }
897  assign 'neighbor' to each neighbor in facet->neighbors
898 
899  FOREACHneighbor_( vertex ) { ... }
900  assign 'neighbor' to each neighbor in vertex->neighbors
901 
902  declare:
903  facetT *neighbor, **neighborp;
904 
905  see:
906  <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
907 */
908 #define FOREACHneighbor_(facet) FOREACHsetelement_(facetT, facet->neighbors, neighbor)
909 
910 /*-<a href="qh-poly.htm#TOC"
911  >--------------------------------</a><a name="FOREACHpoint_">-</a>
912 
913  FOREACHpoint_( points ) { ... }
914  assign 'point' to each point in points set
915 
916  declare:
917  pointT *point, **pointp;
918 
919  see:
920  <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
921 */
922 #define FOREACHpoint_(points) FOREACHsetelement_(pointT, points, point)
923 
924 /*-<a href="qh-poly.htm#TOC"
925  >--------------------------------</a><a name="FOREACHridge_">-</a>
926 
927  FOREACHridge_( ridges ) { ... }
928  assign 'ridge' to each ridge in ridges set
929 
930  declare:
931  ridgeT *ridge, **ridgep;
932 
933  see:
934  <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
935 */
936 #define FOREACHridge_(ridges) FOREACHsetelement_(ridgeT, ridges, ridge)
937 
938 /*-<a href="qh-poly.htm#TOC"
939  >--------------------------------</a><a name="FOREACHvertex_">-</a>
940 
941  FOREACHvertex_( vertices ) { ... }
942  assign 'vertex' to each vertex in vertices set
943 
944  declare:
945  vertexT *vertex, **vertexp;
946 
947  see:
948  <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
949 */
950 #define FOREACHvertex_(vertices) FOREACHsetelement_(vertexT, vertices,vertex)
951 
952 /*-<a href="qh-poly.htm#TOC"
953  >--------------------------------</a><a name="FOREACHfacet_i_">-</a>
954 
955  FOREACHfacet_i_( facets ) { ... }
956  assign 'facet' and 'facet_i' for each facet in facets set
957 
958  declare:
959  facetT *facet;
960  int facet_n, facet_i;
961 
962  see:
963  <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
964 */
965 #define FOREACHfacet_i_(facets) FOREACHsetelement_i_(facetT, facets, facet)
966 
967 /*-<a href="qh-poly.htm#TOC"
968  >--------------------------------</a><a name="FOREACHneighbor_i_">-</a>
969 
970  FOREACHneighbor_i_( facet ) { ... }
971  assign 'neighbor' and 'neighbor_i' for each neighbor in facet->neighbors
972 
973  FOREACHneighbor_i_( vertex ) { ... }
974  assign 'neighbor' and 'neighbor_i' for each neighbor in vertex->neighbors
975 
976  declare:
977  facetT *neighbor;
978  int neighbor_n, neighbor_i;
979 
980  see:
981  <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
982 */
983 #define FOREACHneighbor_i_(facet) FOREACHsetelement_i_(facetT, facet->neighbors, neighbor)
984 
985 /*-<a href="qh-poly.htm#TOC"
986  >--------------------------------</a><a name="FOREACHpoint_i_">-</a>
987 
988  FOREACHpoint_i_( points ) { ... }
989  assign 'point' and 'point_i' for each point in points set
990 
991  declare:
992  pointT *point;
993  int point_n, point_i;
994 
995  see:
996  <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
997 */
998 #define FOREACHpoint_i_(points) FOREACHsetelement_i_(pointT, points, point)
999 
1000 /*-<a href="qh-poly.htm#TOC"
1001  >--------------------------------</a><a name="FOREACHridge_i_">-</a>
1002 
1003  FOREACHridge_i_( ridges ) { ... }
1004  assign 'ridge' and 'ridge_i' for each ridge in ridges set
1005 
1006  declare:
1007  ridgeT *ridge;
1008  int ridge_n, ridge_i;
1009 
1010  see:
1011  <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
1012 */
1013 #define FOREACHridge_i_(ridges) FOREACHsetelement_i_(ridgeT, ridges, ridge)
1014 
1015 /*-<a href="qh-poly.htm#TOC"
1016  >--------------------------------</a><a name="FOREACHvertex_i_">-</a>
1017 
1018  FOREACHvertex_i_( vertices ) { ... }
1019  assign 'vertex' and 'vertex_i' for each vertex in vertices set
1020 
1021  declare:
1022  vertexT *vertex;
1023  int vertex_n, vertex_i;
1024 
1025  see:
1026  <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
1027 */
1028 #define FOREACHvertex_i_(vertices) FOREACHsetelement_i_(vertexT, vertices,vertex)
1029 
1030 /********* -libqhull.c prototypes (duplicated from qhull_a.h) **********************/
1031 
1032 void qh_qhull(void);
1033 boolT qh_addpoint(pointT *furthest, facetT *facet, boolT checkdist);
1034 void qh_printsummary(FILE *fp);
1035 
1036 /********* -user.c prototypes (alphabetical) **********************/
1037 
1038 void qh_errexit(int exitcode, facetT *facet, ridgeT *ridge);
1039 void qh_errprint(const char* string, facetT *atfacet, facetT *otherfacet, ridgeT *atridge, vertexT *atvertex);
1040 int qh_new_qhull(int dim, int numpoints, coordT *points, boolT ismalloc,
1041  char *qhull_cmd, FILE *outfile, FILE *errfile);
1042 void qh_printfacetlist(facetT *facetlist, setT *facets, boolT printall);
1043 void qh_printhelp_degenerate(FILE *fp);
1044 void qh_printhelp_narrowhull(FILE *fp, realT minangle);
1045 void qh_printhelp_singular(FILE *fp);
1046 void qh_user_memsizes(void);
1047 
1048 /********* -usermem.c prototypes (alphabetical) **********************/
1049 void qh_exit(int exitcode);
1050 void qh_fprintf_stderr(int msgcode, const char *fmt, ... );
1051 void qh_free(void *mem);
1052 void *qh_malloc(size_t size);
1053 
1054 /********* -userprintf.c and userprintf_rbox.c prototypes **********************/
1055 void qh_fprintf(FILE *fp, int msgcode, const char *fmt, ... );
1056 void qh_fprintf_rbox(FILE *fp, int msgcode, const char *fmt, ... );
1057 
1058 /***** -geom.c/geom2.c/random.c prototypes (duplicated from geom.h, random.h) ****************/
1059 
1060 facetT *qh_findbest(pointT *point, facetT *startfacet,
1061  boolT bestoutside, boolT newfacets, boolT noupper,
1062  realT *dist, boolT *isoutside, int *numpart);
1063 facetT *qh_findbestnew(pointT *point, facetT *startfacet,
1064  realT *dist, boolT bestoutside, boolT *isoutside, int *numpart);
1065 boolT qh_gram_schmidt(int dim, realT **rows);
1066 void qh_outerinner(facetT *facet, realT *outerplane, realT *innerplane);
1067 void qh_printsummary(FILE *fp);
1068 void qh_projectinput(void);
1069 void qh_randommatrix(realT *buffer, int dim, realT **row);
1070 void qh_rotateinput(realT **rows);
1071 void qh_scaleinput(void);
1072 void qh_setdelaunay(int dim, int count, pointT *points);
1073 coordT *qh_sethalfspace_all(int dim, int count, coordT *halfspaces, pointT *feasible);
1074 
1075 /***** -global.c prototypes (alphabetical) ***********************/
1076 
1077 unsigned long qh_clock(void);
1078 void qh_checkflags(char *command, char *hiddenflags);
1079 void qh_clear_outputflags(void);
1080 void qh_freebuffers(void);
1081 void qh_freeqhull(boolT allmem);
1082 void qh_freeqhull2(boolT allmem);
1083 void qh_init_A(FILE *infile, FILE *outfile, FILE *errfile, int argc, char *argv[]);
1084 void qh_init_B(coordT *points, int numpoints, int dim, boolT ismalloc);
1085 void qh_init_qhull_command(int argc, char *argv[]);
1086 void qh_initbuffers(coordT *points, int numpoints, int dim, boolT ismalloc);
1087 void qh_initflags(char *command);
1088 void qh_initqhull_buffers(void);
1089 void qh_initqhull_globals(coordT *points, int numpoints, int dim, boolT ismalloc);
1090 void qh_initqhull_mem(void);
1091 void qh_initqhull_outputflags(void);
1092 void qh_initqhull_start(FILE *infile, FILE *outfile, FILE *errfile);
1093 void qh_initqhull_start2(FILE *infile, FILE *outfile, FILE *errfile);
1094 void qh_initthresholds(char *command);
1095 void qh_lib_check(int qhullLibraryType, int qhTsize, int vertexTsize, int ridgeTsize, int facetTsize, int setTsize, int qhmemTsize);
1096 void qh_option(const char *option, int *i, realT *r);
1097 #if qh_QHpointer
1098 void qh_restore_qhull(qhT **oldqh);
1099 qhT *qh_save_qhull(void);
1100 #endif
1101 
1102 /***** -io.c prototypes (duplicated from io.h) ***********************/
1103 
1104 void qh_dfacet(unsigned id);
1105 void qh_dvertex(unsigned id);
1106 void qh_printneighborhood(FILE *fp, qh_PRINT format, facetT *facetA, facetT *facetB, boolT printall);
1107 void qh_produce_output(void);
1108 coordT *qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc);
1109 
1110 
1111 /********* -mem.c prototypes (duplicated from mem.h) **********************/
1112 
1113 void qh_meminit(FILE *ferr);
1114 void qh_memfreeshort(int *curlong, int *totlong);
1115 
1116 /********* -poly.c/poly2.c prototypes (duplicated from poly.h) **********************/
1117 
1118 void qh_check_output(void);
1119 void qh_check_points(void);
1120 setT *qh_facetvertices(facetT *facetlist, setT *facets, boolT allfacets);
1121 facetT *qh_findbestfacet(pointT *point, boolT bestoutside,
1122  realT *bestdist, boolT *isoutside);
1123 vertexT *qh_nearvertex(facetT *facet, pointT *point, realT *bestdistp);
1124 pointT *qh_point(int id);
1125 setT *qh_pointfacet(void /*qh.facet_list*/);
1126 int qh_pointid(pointT *point);
1127 setT *qh_pointvertex(void /*qh.facet_list*/);
1128 void qh_setvoronoi_all(void);
1129 void qh_triangulate(void /*qh.facet_list*/);
1130 
1131 /********* -rboxlib.c prototypes **********************/
1132 int qh_rboxpoints(FILE* fout, FILE* ferr, char* rbox_command);
1133 void qh_errexit_rbox(int exitcode);
1134 
1135 /********* -stat.c prototypes (duplicated from stat.h) **********************/
1136 
1137 void qh_collectstatistics(void);
1138 void qh_printallstatistics(FILE *fp, const char *string);
1139 
1140 #endif /* qhDEFlibqhull */
boolT hasTriangulation
Definition: libqhull.h:720
int num_good
Definition: libqhull.h:699
int hull_dim
Definition: libqhull.h:591
Definition: libqhull.h:465
realT centrum_radius
Definition: libqhull.h:628
facetT * qh_findbestfacet(pointT *point, boolT bestoutside, realT *bestdist, boolT *isoutside)
Definition: poly2.c:1239
void qh_init_qhull_command(int argc, char *argv[])
Definition: global.c:575
int KEEPmerge
Definition: libqhull.h:508
flagT newfacet
Definition: libqhull.h:320
boolT PRINTsummary
Definition: libqhull.h:543
void * qh_malloc(size_t size)
Definition: usermem.c:90
setT * hash_table
Definition: libqhull.h:760
realT MAXsumcoord
Definition: libqhull.h:633
realT KEEPminArea
Definition: libqhull.h:509
boolT UPPERdelaunay
Definition: libqhull.h:578
flagT notfurthest
Definition: libqhull.h:329
void qh_fprintf_stderr(int msgcode, const char *fmt,...)
Definition: usermem.c:57
void qh_free(void *mem)
Definition: usermem.c:77
vertexT * previous
Definition: libqhull.h:398
boolT PRINTinner
Definition: libqhull.h:533
realT * lower_threshold
Definition: libqhull.h:611
#define boolT
Definition: libqhull.h:121
realT premerge_cos
Definition: libqhull.h:489
setT * qh_pointvertex(void)
Definition: poly2.c:2547
setT * neighbors
Definition: libqhull.h:299
void qh_init_A(FILE *infile, FILE *outfile, FILE *errfile, int argc, char *argv[])
Definition: global.c:487
Definition: qset.h:83
const char qh_version2[]
Definition: global.c:51
facetT * top
Definition: libqhull.h:374
boolT TRIangulate
Definition: libqhull.h:576
boolT NEWfacets
Definition: libqhull.h:733
int STOPpoint
Definition: libqhull.h:567
void qh_qhull(void)
Definition: libqhull.c:60
pointT * input_points
Definition: libqhull.h:596
realT ANGLEround
Definition: libqhull.h:627
coordT * center
Definition: libqhull.h:286
facetT * qh_findbest(pointT *point, facetT *startfacet, boolT bestoutside, boolT newfacets, boolT noupper, realT *dist, boolT *isoutside, int *numpart)
Definition: geom.c:140
boolT NOnarrow
Definition: libqhull.h:518
boolT ZEROall_ok
Definition: libqhull.h:748
char * feasible_string
Definition: libqhull.h:587
coordT * temp_malloc
Definition: libqhull.h:777
void qh_printallstatistics(FILE *fp, const char *string)
Definition: stat.c:559
boolT BESToutside
Definition: libqhull.h:485
setT * facet_mergeset
Definition: libqhull.h:758
vertexT * tracevertex
Definition: libqhull.h:689
boolT PRINTspheres
Definition: libqhull.h:541
void qh_printhelp_narrowhull(FILE *fp, realT minangle)
Definition: user.c:423
facetT * facet_tail
Definition: libqhull.h:678
jmp_buf errexit
Definition: libqhull.h:656
int ridgeoutnum
Definition: libqhull.h:802
unsigned tracefacet_id
Definition: libqhull.h:686
boolT SETroundoff
Definition: libqhull.h:560
int PROJECTinput
Definition: libqhull.h:547
facetT * facet_list
Definition: libqhull.h:677
realT premerge_centrum
Definition: libqhull.h:514
boolT VORONOI
Definition: libqhull.h:582
boolT WAScoplanar
Definition: libqhull.h:749
#define pointT
Definition: libqhull.h:96
realT MAXabs_coord
Definition: libqhull.h:631
flagT mergehorizon
Definition: libqhull.h:341
flagT deleted
Definition: libqhull.h:407
boolT USEstdout
Definition: libqhull.h:579
void qh_fprintf(FILE *fp, int msgcode, const char *fmt,...)
Definition: userprintf.c:42
unsigned long qh_clock(void)
Definition: global.c:239
facetT * newcycle
Definition: libqhull.h:282
realT * NEARzero
Definition: libqhull.h:641
int qhull_optionlen
Definition: libqhull.h:602
void qh_dvertex(unsigned id)
Definition: io.c:109
void qh_lib_check(int qhullLibraryType, int qhTsize, int vertexTsize, int ridgeTsize, int facetTsize, int setTsize, int qhmemTsize)
Definition: global.c:2039
setT * qh_pointfacet(void)
Definition: poly2.c:2510
int TRACEmerge
Definition: libqhull.h:575
#define flagT
Definition: libqhull.h:109
realT postmerge_cos
Definition: libqhull.h:490
boolT RANDOMoutside
Definition: libqhull.h:553
facetT * previous
Definition: libqhull.h:293
boolT ATinfinity
Definition: libqhull.h:482
qhT qh_qh
Definition: global.c:26
int IStracing
Definition: libqhull.h:503
void qh_initthresholds(char *command)
Definition: global.c:1931
qhstatT * old_qhstat
Definition: libqhull.h:800
void qh_check_output(void)
Definition: poly2.c:302
boolT MERGEindependent
Definition: libqhull.h:512
realT PRINTradius
Definition: libqhull.h:739
void qh_clear_outputflags(void)
Definition: global.c:167
void qh_printfacetlist(facetT *facetlist, setT *facets, boolT printall)
Definition: user.c:325
qh_CENTER CENTERtype
Definition: libqhull.h:716
pointT * interior_point
Definition: libqhull.h:663
int maxline
Definition: libqhull.h:775
int qhull_commandsiz2
Definition: libqhull.h:599
boolT KEEPcoplanar
Definition: libqhull.h:505
setT * coplanarset
Definition: libqhull.h:305
pointT * first_point
Definition: libqhull.h:594
void qh_errexit_rbox(int exitcode)
Definition: rboxlib.c:866
realT ONEmerge
Definition: libqhull.h:643
int qhull_optionsiz
Definition: libqhull.h:603
boolT PRINTnoplanes
Definition: libqhull.h:535
realT MINdenom_2
Definition: libqhull.h:638
pointT * GOODvertexp
Definition: libqhull.h:500
boolT SKIPconvex
Definition: libqhull.h:562
facetT * visible_list
Definition: libqhull.h:683
boolT PROJECTdelaunay
Definition: libqhull.h:545
boolT DELAUNAY
Definition: libqhull.h:491
facetT * newfacet_list
Definition: libqhull.h:682
boolT ONLYmax
Definition: libqhull.h:523
int num_facets
Definition: libqhull.h:694
FILE * fin
Definition: libqhull.h:660
void qh_user_memsizes(void)
Definition: user.c:531
int qh_pointid(pointT *point)
Definition: poly.c:1053
realT totarea
Definition: libqhull.h:744
setT * ridges
Definition: libqhull.h:297
coordT ** gm_row
Definition: libqhull.h:773
boolT HALFspace
Definition: libqhull.h:501
realT MAXlastcoord
Definition: libqhull.h:632
boolT PICKfurthest
Definition: libqhull.h:524
void qh_initqhull_buffers(void)
Definition: global.c:1442
boolT ZEROcentrum
Definition: libqhull.h:607
realT MINlastcoord
Definition: libqhull.h:639
setT * other_points
Definition: libqhull.h:762
boolT qh_addpoint(pointT *furthest, facetT *facet, boolT checkdist)
Definition: libqhull.c:168
realT last_newhigh
Definition: libqhull.h:797
void qh_produce_output(void)
Definition: io.c:39
void qh_setvoronoi_all(void)
Definition: poly2.c:2735
realT JOGGLEmax
Definition: libqhull.h:721
boolT PRINTouter
Definition: libqhull.h:537
int RERUN
Definition: libqhull.h:556
int DROPdim
Definition: libqhull.h:493
facetT * bottom
Definition: libqhull.h:375
unsigned visitid
Definition: libqhull.h:309
boolT POSTmerge
Definition: libqhull.h:525
FILE * ferr
Definition: libqhull.h:662
boolT firstcentrum
Definition: libqhull.h:792
boolT PRINTcoplanar
Definition: libqhull.h:529
realT MINdenom_1
Definition: libqhull.h:635
realT MINoutside
Definition: libqhull.h:480
realT MAXwidth
Definition: libqhull.h:634
boolT MERGEvertices
Definition: libqhull.h:516
setT * vertices
Definition: libqhull.h:295
boolT ALLOWrestart
Definition: libqhull.h:714
realT * upper_bound
Definition: libqhull.h:612
int run_id
Definition: libqhull.h:605
boolT QHULLfinished
Definition: libqhull.h:743
void qh_triangulate(void)
Definition: poly2.c:2767
void qh_freebuffers(void)
Definition: global.c:276
int TRACElastrun
Definition: libqhull.h:572
vertexT * vertex_tail
Definition: libqhull.h:691
realT AREAfactor
Definition: libqhull.h:585
jmp_buf restartexit
Definition: libqhull.h:658
realT WIDEfacet
Definition: libqhull.h:646
unsigned long hulltime
Definition: libqhull.h:712
setT * neighbors
Definition: libqhull.h:400
boolT PRINToptions1st
Definition: libqhull.h:536
void qh_initflags(char *command)
Definition: global.c:615
#define coordT
Definition: libqhull.h:80
void qh_printsummary(FILE *fp)
Definition: libqhull.c:1205
boolT FORCEoutput
Definition: libqhull.h:494
int TESTpoints
Definition: libqhull.h:569
realT DISTround
Definition: libqhull.h:630
facetT * trivisible
Definition: libqhull.h:283
boolT VERTEXneighbors
Definition: libqhull.h:606
unsigned lastreport
Definition: libqhull.h:798
flagT simplicial
Definition: libqhull.h:324
Definition: stat.h:503
boolT PRINTprecision
Definition: libqhull.h:538
setT * outsideset
Definition: libqhull.h:302
flagT tested
Definition: libqhull.h:343
void qh_check_points(void)
Definition: poly2.c:365
void qh_initqhull_outputflags(void)
Definition: global.c:1722
flagT dupridge
Definition: libqhull.h:336
int TRACElevel
Definition: libqhull.h:571
realT outside_err
Definition: libqhull.h:644
facetT * qh_findbestnew(pointT *point, facetT *startfacet, realT *dist, boolT bestoutside, boolT *isoutside, int *numpart)
Definition: geom.c:412
boolT VIRTUALmemory
Definition: libqhull.h:581
unsigned nummerge
Definition: libqhull.h:312
int qhull_optionsiz2
Definition: libqhull.h:604
int num_points
Definition: libqhull.h:593
void qh_initqhull_start(FILE *infile, FILE *outfile, FILE *errfile)
Definition: global.c:1827
flagT nonconvex
Definition: libqhull.h:379
int normal_size
Definition: libqhull.h:664
coordT * gm_matrix
Definition: libqhull.h:772
boolT PREmerge
Definition: libqhull.h:526
boolT SPLITthresholds
Definition: libqhull.h:563
flagT redundant
Definition: libqhull.h:347
boolT SCALEinput
Definition: libqhull.h:558
flagT upperdelaunay
Definition: libqhull.h:328
boolT findbestnew
Definition: libqhull.h:735
pointT * point
Definition: libqhull.h:399
realT totvol
Definition: libqhull.h:745
void qh_printhelp_singular(FILE *fp)
Definition: user.c:440
unsigned tracevertex_id
Definition: libqhull.h:688
flagT flipped
Definition: libqhull.h:327
int printoutnum
Definition: libqhull.h:742
int GOODpoint
Definition: libqhull.h:495
flagT newlist
Definition: libqhull.h:408
boolT MERGING
Definition: libqhull.h:513
boolT PRINTridges
Definition: libqhull.h:540
boolT maxoutdone
Definition: libqhull.h:722
int printoutvar
Definition: libqhull.h:741
int TEMPsize
Definition: libqhull.h:666
flagT mergeridge2
Definition: libqhull.h:339
int REPORTfreq
Definition: libqhull.h:554
qh_PRINT
Definition: libqhull.h:161
FILE * fout
Definition: libqhull.h:661
unsigned id
Definition: libqhull.h:376
void qh_exit(int exitcode)
int PRINTdim
Definition: libqhull.h:530
flagT seen
Definition: libqhull.h:404
void qh_initbuffers(coordT *points, int numpoints, int dim, boolT ismalloc)
coordT maxoutside
Definition: libqhull.h:267
flagT isarea
Definition: libqhull.h:333
unsigned id
Definition: libqhull.h:402
boolT ERREXITcalled
Definition: libqhull.h:791
boolT NOerrexit
Definition: libqhull.h:737
void qh_option(const char *option, int *i, realT *r)
Definition: global.c:2115
facetT * samecycle
Definition: libqhull.h:280
boolT PRINTcentrums
Definition: libqhull.h:528
void qh_initqhull_globals(coordT *points, int numpoints, int dim, boolT ismalloc)
Definition: global.c:1496
void qh_printhelp_degenerate(FILE *fp)
Definition: user.c:346
boolT PRINTtransparent
Definition: libqhull.h:544
int TRACEpoint
Definition: libqhull.h:573
void qh_checkflags(char *command, char *hiddenflags)
Definition: global.c:86
boolT ALLpoints
Definition: libqhull.h:477
void qh_projectinput(void)
Definition: geom2.c:1424
pointT * qh_point(int id)
Definition: poly2.c:2446
boolT VERIFYoutput
Definition: libqhull.h:580
int build_cnt
Definition: libqhull.h:715
realT TRACEdist
Definition: libqhull.h:574
int ROTATErandom
Definition: libqhull.h:557
boolT DOintersections
Definition: libqhull.h:492
boolT CDDoutput
Definition: libqhull.h:487
void qh_initqhull_start2(FILE *infile, FILE *outfile, FILE *errfile)
Definition: global.c:1856
flagT keepcentrum
Definition: libqhull.h:344
facetT * facet_next
Definition: libqhull.h:679
int STOPcone
Definition: libqhull.h:565
boolT PRINTdots
Definition: libqhull.h:531
coordT * feasible_point
Definition: libqhull.h:588
facetT * next
Definition: libqhull.h:294
void qh_randommatrix(realT *buffer, int dim, realT **row)
Definition: random.c:204
int furthest_id
Definition: libqhull.h:717
boolT hasAreaVolume
Definition: libqhull.h:719
boolT qh_gram_schmidt(int dim, realT **rows)
Definition: geom2.c:763
flagT visible
Definition: libqhull.h:321
flagT seen2
Definition: libqhull.h:405
realT last_low
Definition: libqhull.h:795
boolT GETarea
Definition: libqhull.h:589
flagT cycledone
Definition: libqhull.h:342
boolT old_randomdist
Definition: libqhull.h:793
flagT tested
Definition: libqhull.h:378
void qh_freeqhull2(boolT allmem)
Definition: global.c:453
realT RANDOMfactor
Definition: libqhull.h:550
flagT newmerge
Definition: libqhull.h:345
void qh_init_B(coordT *points, int numpoints, int dim, boolT ismalloc)
Definition: global.c:534
realT max_outside
Definition: libqhull.h:723
realT RANDOMb
Definition: libqhull.h:552
realT min_vertex
Definition: libqhull.h:729
void qh_outerinner(facetT *facet, realT *outerplane, realT *innerplane)
Definition: geom2.c:1279
coordT furthestdist
Definition: libqhull.h:264
void qh_collectstatistics(void)
Definition: stat.c:316
setT * old_tempstack
Definition: libqhull.h:801
boolT RANDOMdist
Definition: libqhull.h:549
boolT KEEPnearinside
Definition: libqhull.h:590
facetT * replace
Definition: libqhull.h:278
realT postmerge_centrum
Definition: libqhull.h:515
coordT * qh_sethalfspace_all(int dim, int count, coordT *halfspaces, pointT *feasible)
Definition: geom2.c:1918
flagT mergeridge
Definition: libqhull.h:337
flagT seen2
Definition: libqhull.h:326
realT NEARinside
Definition: libqhull.h:642
int num_vertices
Definition: libqhull.h:696
int num_visible
Definition: libqhull.h:685
boolT AVOIDold
Definition: libqhull.h:484
void qh_memfreeshort(int *curlong, int *totlong)
Definition: mem.c:288
coordT * qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc)
Definition: io.c:3673
boolT TRInormals
Definition: libqhull.h:577
unsigned int vertex_visit
Definition: libqhull.h:747
boolT PRINTneighbors
Definition: libqhull.h:534
unsigned int visit_id
Definition: libqhull.h:746
int KEEParea
Definition: libqhull.h:504
boolT CDDinput
Definition: libqhull.h:486
boolT POSTmerging
Definition: libqhull.h:740
unsigned vertex_id
Definition: libqhull.h:702
boolT ONLYgood
Definition: libqhull.h:522
boolT ANNOTATEoutput
Definition: libqhull.h:481
const char qh_version[]
Definition: global.c:50
void qh_rotateinput(realT **rows)
Definition: geom2.c:1584
boolT MERGEexact
Definition: libqhull.h:511
fmt
Definition: obb.py:126
setT * del_vertices
Definition: libqhull.h:763
flagT seen
Definition: libqhull.h:325
coordT offset
Definition: libqhull.h:273
flagT good
Definition: libqhull.h:332
boolT ANGLEmerge
Definition: libqhull.h:478
realT * lower_bound
Definition: libqhull.h:613
setT * vertices
Definition: libqhull.h:372
qh_pointT
Definition: libqhull.h:97
flagT seen
Definition: libqhull.h:377
int qh_new_qhull(int dim, int numpoints, coordT *points, boolT ismalloc, char *qhull_cmd, FILE *outfile, FILE *errfile)
Definition: user.c:129
unsigned visitid
Definition: libqhull.h:403
boolT NOnearinside
Definition: libqhull.h:519
void qh_errexit(int exitcode, facetT *facet, ridgeT *ridge)
Definition: user.c:213
boolT PRINTstatistics
Definition: libqhull.h:542
realT MINdenom
Definition: libqhull.h:636
pointT * GOODpointp
Definition: libqhull.h:496
realT MINdenom_1_2
Definition: libqhull.h:637
char * line
Definition: libqhull.h:774
int input_dim
Definition: libqhull.h:592
realT RANDOMa
Definition: libqhull.h:551
setT * degen_mergeset
Definition: libqhull.h:759
boolT GOODthreshold
Definition: libqhull.h:497
realT max_vertex
Definition: libqhull.h:727
realT PRINTcradius
Definition: libqhull.h:738
void qh_printneighborhood(FILE *fp, qh_PRINT format, facetT *facetA, facetT *facetB, boolT printall)
Definition: io.c:2809
void qh_fprintf_rbox(FILE *fp, int msgcode, const char *fmt,...)
unsigned ridge_id
Definition: libqhull.h:701
void qh_dfacet(unsigned id)
Definition: io.c:91
void qh_freeqhull(boolT allmem)
Definition: global.c:425
vertexT * newvertex_list
Definition: libqhull.h:692
boolT ISqhullQh
Definition: libqhull.h:502
void qh_setdelaunay(int dim, int count, pointT *points)
Definition: geom2.c:1806
int center_size
Definition: libqhull.h:665
boolT PRINTgood
Definition: libqhull.h:532
realT cos_max
Definition: libqhull.h:629
void qh_scaleinput(void)
Definition: geom2.c:1646
coordT * half_space
Definition: libqhull.h:776
facetT * triowner
Definition: libqhull.h:284
int num_outside
Definition: libqhull.h:697
boolT APPROXhull
Definition: libqhull.h:479
boolT findbest_notsharp
Definition: libqhull.h:736
boolT TESTvneighbors
Definition: libqhull.h:570
int GOODvertex
Definition: libqhull.h:499
boolT DOcheckmax
Definition: libqhull.h:586
int REPORTfreq2
Definition: libqhull.h:555
void qh_meminit(FILE *ferr)
Definition: mem.c:317
boolT NARROWhull
Definition: libqhull.h:640
flagT toporient
Definition: libqhull.h:322
boolT QUICKhelp
Definition: libqhull.h:548
boolT POINTSmalloc
Definition: libqhull.h:595
flagT delridge
Definition: libqhull.h:406
boolT CHECKfrequently
Definition: libqhull.h:488
qh_CENTER
Definition: libqhull.h:141
realT area
Definition: libqhull.h:277
boolT SCALElast
Definition: libqhull.h:559
void qh_initqhull_mem(void)
Definition: global.c:1684
unsigned id
Definition: libqhull.h:311
realT MINvisible
Definition: libqhull.h:517
vertexT * next
Definition: libqhull.h:397
int mergereport
Definition: libqhull.h:799
boolT NOwide
Definition: libqhull.h:521
realT MAXcoplanar
Definition: libqhull.h:510
int qh_rboxpoints(FILE *fout, FILE *ferr, char *rbox_command)
Definition: rboxlib.c:90
void qh_errprint(const char *string, facetT *atfacet, facetT *otherfacet, ridgeT *atridge, vertexT *atvertex)
Definition: user.c:277
#define realT
Definition: user.h:154
flagT coplanar
Definition: libqhull.h:340
coordT * normal
Definition: libqhull.h:274
setT * qh_facetvertices(facetT *facetlist, setT *facets, boolT allfacets)
Definition: io.c:801
unsigned facet_id
Definition: libqhull.h:700
setT * coplanarfacetset
Definition: libqhull.h:794
realT * upper_threshold
Definition: libqhull.h:608
union facetT::@20 f
boolT SKIPcheckmax
Definition: libqhull.h:561
facetT * GOODclosest
Definition: libqhull.h:718
vertexT * qh_nearvertex(facetT *facet, pointT *point, realT *bestdistp)
Definition: poly2.c:2248
facetT * tracefacet
Definition: libqhull.h:687
flagT tricoplanar
Definition: libqhull.h:314
realT last_high
Definition: libqhull.h:796
boolT input_malloc
Definition: libqhull.h:597
boolT NOpremerge
Definition: libqhull.h:520
vertexT * vertex_list
Definition: libqhull.h:690
flagT degenerate
Definition: libqhull.h:346
boolT KEEPinside
Definition: libqhull.h:506


hpp-fcl
Author(s):
autogenerated on Fri Jun 2 2023 02:39:01