~ubuntu-branches/ubuntu/trusty/qhull/trusty-proposed

« back to all changes in this revision

Viewing changes to src/merge.h

  • Committer: Package Import Robot
  • Author(s): Barak A. Pearlmutter
  • Date: 2014-02-13 11:09:12 UTC
  • mfrom: (8.1.4 sid)
  • Revision ID: package-import@ubuntu.com-20140213110912-ifwyxorlsnnl1ebh
Tags: 2012.1-4
Add convenience link to #include <qhull/qhull.h> to simplify transition.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*<html><pre>  -<a                             href="qh-merge.htm"
2
 
  >-------------------------------</a><a name="TOP">-</a>
3
 
 
4
 
   merge.h 
5
 
   header file for merge.c
6
 
 
7
 
   see qh-merge.htm and merge.c
8
 
 
9
 
   copyright (c) 1993-2003, The Geometry Center
10
 
*/
11
 
 
12
 
#ifndef qhDEFmerge
13
 
#define qhDEFmerge 1
14
 
 
15
 
 
16
 
/*============ -constants- ==============*/
17
 
 
18
 
/*-<a                             href="qh-merge.htm#TOC"
19
 
  >--------------------------------</a><a name="qh_ANGLEredundant">-</a>
20
 
 
21
 
  qh_ANGLEredundant
22
 
    indicates redundant merge in mergeT->angle
23
 
*/
24
 
#define qh_ANGLEredundant 6.0
25
 
 
26
 
/*-<a                             href="qh-merge.htm#TOC"
27
 
  >--------------------------------</a><a name="qh_ANGLEdegen">-</a>
28
 
  
29
 
  qh_ANGLEdegen
30
 
    indicates degenerate facet in mergeT->angle
31
 
*/
32
 
#define qh_ANGLEdegen     5.0
33
 
 
34
 
/*-<a                             href="qh-merge.htm#TOC"
35
 
  >--------------------------------</a><a name="qh_ANGLEconcave">-</a>
36
 
  
37
 
  qh_ANGLEconcave
38
 
    offset to indicate concave facets in mergeT->angle
39
 
  
40
 
  notes:
41
 
    concave facets are assigned the range of [2,4] in mergeT->angle
42
 
    roundoff error may make the angle less than 2
43
 
*/
44
 
#define qh_ANGLEconcave  1.5
45
 
 
46
 
/*-<a                             href="qh-merge.htm#TOC"
47
 
  >--------------------------------</a><a name="MRG">-</a>
48
 
  
49
 
  MRG... (mergeType)
50
 
    indicates the type of a merge (mergeT->type)
51
 
*/
52
 
typedef enum {  /* in sort order for facet_mergeset */
53
 
  MRGnone= 0,
54
 
  MRGcoplanar,          /* centrum coplanar */
55
 
  MRGanglecoplanar,     /* angle coplanar */
56
 
                        /* could detect half concave ridges */
57
 
  MRGconcave,           /* concave ridge */
58
 
  MRGflip,              /* flipped facet. facet1 == facet2 */
59
 
  MRGridge,             /* duplicate ridge (qh_MERGEridge) */
60
 
                        /* degen and redundant go onto degen_mergeset */
61
 
  MRGdegen,             /* degenerate facet (not enough neighbors) facet1 == facet2 */
62
 
  MRGredundant,         /* redundant facet (vertex subset) */
63
 
                        /* merge_degenredundant assumes degen < redundant */
64
 
  MRGmirror,            /* mirror facet from qh_triangulate */
65
 
  ENDmrg
66
 
} mergeType;
67
 
 
68
 
/*-<a                             href="qh-merge.htm#TOC"
69
 
  >--------------------------------</a><a name="qh_MERGEapex">-</a>
70
 
  
71
 
  qh_MERGEapex
72
 
    flag for qh_mergefacet() to indicate an apex merge  
73
 
*/
74
 
#define qh_MERGEapex     True
75
 
 
76
 
/*============ -structures- ====================*/
77
 
 
78
 
/*-<a                             href="qh-merge.htm#TOC"
79
 
  >--------------------------------</a><a name="mergeT">-</a>
80
 
     
81
 
  mergeT
82
 
    structure used to merge facets
83
 
*/
84
 
 
85
 
typedef struct mergeT mergeT;
86
 
struct mergeT {         /* initialize in qh_appendmergeset */
87
 
  realT   angle;        /* angle between normals of facet1 and facet2 */
88
 
  facetT *facet1;       /* will merge facet1 into facet2 */
89
 
  facetT *facet2;
90
 
  mergeType type;
91
 
};
92
 
 
93
 
 
94
 
/*=========== -macros- =========================*/
95
 
 
96
 
/*-<a                             href="qh-merge.htm#TOC"
97
 
  >--------------------------------</a><a name="FOREACHmerge_">-</a>
98
 
     
99
 
  FOREACHmerge_( merges ) {...}
100
 
    assign 'merge' to each merge in merges
101
 
       
102
 
  notes:
103
 
    uses 'mergeT *merge, **mergep;'
104
 
    if qh_mergefacet(),
105
 
      restart since qh.facet_mergeset may change
106
 
    see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
107
 
*/
108
 
#define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge)
109
 
 
110
 
/*============ prototypes in alphabetical order after pre/postmerge =======*/
111
 
 
112
 
void    qh_premerge (vertexT *apex, realT maxcentrum, realT maxangle);
113
 
void    qh_postmerge (char *reason, realT maxcentrum, realT maxangle, 
114
 
             boolT vneighbors);
115
 
void    qh_all_merges (boolT othermerge, boolT vneighbors);
116
 
void    qh_appendmergeset(facetT *facet, facetT *neighbor, mergeType mergetype, realT *angle);
117
 
setT   *qh_basevertices( facetT *samecycle);
118
 
void    qh_checkconnect (void /* qh new_facets */);
119
 
boolT   qh_checkzero (boolT testall);
120
 
int     qh_compareangle(const void *p1, const void *p2);
121
 
int     qh_comparemerge(const void *p1, const void *p2);
122
 
int     qh_comparevisit (const void *p1, const void *p2);
123
 
void    qh_copynonconvex (ridgeT *atridge);
124
 
void    qh_degen_redundant_facet (facetT *facet);
125
 
void    qh_degen_redundant_neighbors (facetT *facet, facetT *delfacet);
126
 
vertexT *qh_find_newvertex (vertexT *oldvertex, setT *vertices, setT *ridges);
127
 
void    qh_findbest_test (boolT testcentrum, facetT *facet, facetT *neighbor,
128
 
           facetT **bestfacet, realT *distp, realT *mindistp, realT *maxdistp);
129
 
facetT *qh_findbestneighbor(facetT *facet, realT *distp, realT *mindistp, realT *maxdistp);
130
 
void    qh_flippedmerges(facetT *facetlist, boolT *wasmerge);
131
 
void    qh_forcedmerges( boolT *wasmerge);
132
 
void    qh_getmergeset(facetT *facetlist);
133
 
void    qh_getmergeset_initial (facetT *facetlist);
134
 
void    qh_hashridge (setT *hashtable, int hashsize, ridgeT *ridge, vertexT *oldvertex);
135
 
ridgeT *qh_hashridge_find (setT *hashtable, int hashsize, ridgeT *ridge, 
136
 
              vertexT *vertex, vertexT *oldvertex, int *hashslot);
137
 
void    qh_makeridges(facetT *facet);
138
 
void    qh_mark_dupridges(facetT *facetlist);
139
 
void    qh_maydropneighbor (facetT *facet);
140
 
int     qh_merge_degenredundant (void);
141
 
void    qh_merge_nonconvex( facetT *facet1, facetT *facet2, mergeType mergetype);
142
 
void    qh_mergecycle (facetT *samecycle, facetT *newfacet);
143
 
void    qh_mergecycle_all (facetT *facetlist, boolT *wasmerge);
144
 
void    qh_mergecycle_facets( facetT *samecycle, facetT *newfacet);
145
 
void    qh_mergecycle_neighbors(facetT *samecycle, facetT *newfacet);
146
 
void    qh_mergecycle_ridges(facetT *samecycle, facetT *newfacet);
147
 
void    qh_mergecycle_vneighbors( facetT *samecycle, facetT *newfacet);
148
 
void    qh_mergefacet(facetT *facet1, facetT *facet2, realT *mindist, realT *maxdist, boolT mergeapex);
149
 
void    qh_mergefacet2d (facetT *facet1, facetT *facet2);
150
 
void    qh_mergeneighbors(facetT *facet1, facetT *facet2);
151
 
void    qh_mergeridges(facetT *facet1, facetT *facet2);
152
 
void    qh_mergesimplex(facetT *facet1, facetT *facet2, boolT mergeapex);
153
 
void    qh_mergevertex_del (vertexT *vertex, facetT *facet1, facetT *facet2);
154
 
void    qh_mergevertex_neighbors(facetT *facet1, facetT *facet2);
155
 
void    qh_mergevertices(setT *vertices1, setT **vertices);
156
 
setT   *qh_neighbor_intersections (vertexT *vertex);
157
 
void    qh_newvertices (setT *vertices);
158
 
boolT   qh_reducevertices (void);
159
 
vertexT *qh_redundant_vertex (vertexT *vertex);
160
 
boolT   qh_remove_extravertices (facetT *facet);
161
 
vertexT *qh_rename_sharedvertex (vertexT *vertex, facetT *facet);
162
 
void    qh_renameridgevertex(ridgeT *ridge, vertexT *oldvertex, vertexT *newvertex);
163
 
void    qh_renamevertex(vertexT *oldvertex, vertexT *newvertex, setT *ridges,
164
 
                        facetT *oldfacet, facetT *neighborA);
165
 
boolT   qh_test_appendmerge (facetT *facet, facetT *neighbor);
166
 
boolT   qh_test_vneighbors (void /* qh newfacet_list */);
167
 
void    qh_tracemerge (facetT *facet1, facetT *facet2);
168
 
void    qh_tracemerging (void);
169
 
void    qh_updatetested( facetT *facet1, facetT *facet2);
170
 
setT   *qh_vertexridges (vertexT *vertex);
171
 
void    qh_vertexridges_facet (vertexT *vertex, facetT *facet, setT **ridges);
172
 
void    qh_willdelete (facetT *facet, facetT *replace);
173
 
 
174
 
#endif /* qhDEFmerge */