Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

merge.h

Go to the documentation of this file.
00001 /*<html><pre>  -<a                             href="qh-merge.htm"
00002   >-------------------------------</a><a name="TOP">-</a>
00003 
00004    merge.h 
00005    header file for merge.c
00006 
00007    see qh-merge.htm and merge.c
00008 
00009    copyright (c) 1993-2001, The Geometry Center
00010 */
00011 
00012 #ifndef qhDEFmerge
00013 #define qhDEFmerge 1
00014 
00015 
00016 /*============ -constants- ==============*/
00017 
00018 /*-<a                             href="qh-merge.htm#TOC"
00019   >--------------------------------</a><a name="qh_ANGLEredundant">-</a>
00020 
00021   qh_ANGLEredundant
00022     indicates redundant merge in mergeT->angle
00023 */
00024 #define qh_ANGLEredundant 6.0
00025 
00026 /*-<a                             href="qh-merge.htm#TOC"
00027   >--------------------------------</a><a name="qh_ANGLEdegen">-</a>
00028   
00029   qh_ANGLEdegen
00030     indicates degenerate facet in mergeT->angle
00031 */
00032 #define qh_ANGLEdegen     5.0
00033 
00034 /*-<a                             href="qh-merge.htm#TOC"
00035   >--------------------------------</a><a name="qh_ANGLEconcave">-</a>
00036   
00037   qh_ANGLEconcave
00038     offset to indicate concave facets in mergeT->angle
00039   
00040   notes:
00041     concave facets are assigned the range of [2,4] in mergeT->angle
00042     roundoff error may make the angle less than 2
00043 */
00044 #define qh_ANGLEconcave  1.5
00045 
00046 /*-<a                             href="qh-merge.htm#TOC"
00047   >--------------------------------</a><a name="MRG...">-</a>
00048   
00049   MRG... (mergeType)
00050     indicates the type of a merge (mergeT->type)
00051 */
00052 typedef enum {  /* in sort order for facet_mergeset */
00053   MRGnone= 0,
00054   MRGcoplanar,          /* centrum coplanar */
00055   MRGanglecoplanar,     /* angle coplanar */
00056                         /* could detect half concave ridges */
00057   MRGconcave,           /* concave ridge */
00058   MRGflip,              /* flipped facet. facet1 == facet2 */
00059   MRGridge,             /* duplicate ridge (qh_MERGEridge) */
00060                         /* degen and redundant go onto degen_mergeset */
00061   MRGdegen,             /* degenerate facet (not enough neighbors) facet1 == facet2 */
00062   MRGredundant,         /* redundant facet (vertex subset) */
00063                         /* merge_degenredundant assumes degen < redundant */
00064   ENDmrg
00065 } mergeType;
00066 
00067 /*-<a                             href="qh-merge.htm#TOC"
00068   >--------------------------------</a><a name="qh_MERGEapex">-</a>
00069   
00070   qh_MERGEapex
00071     flag for qh_mergefacet() to indicate an apex merge  
00072 */
00073 #define qh_MERGEapex     True
00074 
00075 /*============ -structures- ====================*/
00076 
00077 /*-<a                             href="qh-merge.htm#TOC"
00078   >--------------------------------</a><a name="mergeT">-</a>
00079      
00080   mergeT
00081     structure used to merge facets
00082 */
00083 
00084 typedef struct mergeT mergeT;
00085 struct mergeT {         /* initialize in qh_appendmergeset */
00086   realT   angle;        /* angle between normals of facet1 and facet2 */
00087   facetT *facet1;       /* will merge facet1 into facet2 */
00088   facetT *facet2;
00089   mergeType type;
00090 };
00091 
00092 
00093 /*=========== -macros- =========================*/
00094 
00095 /*-<a                             href="qh-merge.htm#TOC"
00096   >--------------------------------</a><a name="FOREACHmerge_">-</a>
00097      
00098   FOREACHmerge_( merges ) {...}
00099     assign 'merge' to each merge in merges
00100        
00101   notes:
00102     uses 'mergeT *merge, **mergep;'
00103     if qh_mergefacet(),
00104       restart since qh.facet_mergeset may change
00105     see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
00106 */
00107 #define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge)
00108 
00109 /*============ prototypes in alphabetical order after pre/postmerge =======*/
00110 
00111 void    qh_premerge (vertexT *apex, realT maxcentrum, realT maxangle);
00112 void    qh_postmerge (char *reason, realT maxcentrum, realT maxangle, 
00113              boolT vneighbors);
00114 void    qh_all_merges (boolT othermerge, boolT vneighbors);
00115 void    qh_appendmergeset(facetT *facet, facetT *neighbor, mergeType mergetype, realT *angle);
00116 setT   *qh_basevertices( facetT *samecycle);
00117 void    qh_checkconnect (void /* qh new_facets */);
00118 boolT   qh_checkzero (boolT testall);
00119 void    qh_copynonconvex (ridgeT *atridge);
00120 void    qh_degen_redundant_facet (facetT *facet);
00121 void    qh_degen_redundant_neighbors (facetT *facet, facetT *delfacet);
00122 vertexT *qh_find_newvertex (vertexT *oldvertex, setT *vertices, setT *ridges);
00123 void    qh_findbest_test (boolT testcentrum, facetT *facet, facetT *neighbor,
00124            facetT **bestfacet, realT *distp, realT *mindistp, realT *maxdistp);
00125 facetT *qh_findbestneighbor(facetT *facet, realT *distp, realT *mindistp, realT *maxdistp);
00126 void    qh_flippedmerges(facetT *facetlist, boolT *wasmerge);
00127 void    qh_forcedmerges( boolT *wasmerge);
00128 void    qh_getmergeset(facetT *facetlist);
00129 void    qh_getmergeset_initial (facetT *facetlist);
00130 void    qh_hashridge (setT *hashtable, int hashsize, ridgeT *ridge, vertexT *oldvertex);
00131 ridgeT *qh_hashridge_find (setT *hashtable, int hashsize, ridgeT *ridge, 
00132               vertexT *vertex, vertexT *oldvertex, int *hashslot);
00133 void    qh_makeridges(facetT *facet);
00134 void    qh_mark_dupridges(facetT *facetlist);
00135 void    qh_maydropneighbor (facetT *facet);
00136 int     qh_merge_degenredundant (void);
00137 void    qh_merge_nonconvex( facetT *facet1, facetT *facet2, mergeType mergetype);
00138 void    qh_mergecycle (facetT *samecycle, facetT *newfacet);
00139 void    qh_mergecycle_all (facetT *facetlist, boolT *wasmerge);
00140 void    qh_mergecycle_facets( facetT *samecycle, facetT *newfacet);
00141 void    qh_mergecycle_neighbors(facetT *samecycle, facetT *newfacet);
00142 void    qh_mergecycle_ridges(facetT *samecycle, facetT *newfacet);
00143 void    qh_mergecycle_vneighbors( facetT *samecycle, facetT *newfacet);
00144 void    qh_mergefacet(facetT *facet1, facetT *facet2, realT *mindist, realT *maxdist, boolT mergeapex);
00145 void    qh_mergefacet2d (facetT *facet1, facetT *facet2);
00146 void    qh_mergeneighbors(facetT *facet1, facetT *facet2);
00147 void    qh_mergeridges(facetT *facet1, facetT *facet2);
00148 void    qh_mergesimplex(facetT *facet1, facetT *facet2, boolT mergeapex);
00149 void    qh_mergevertex_del (vertexT *vertex, facetT *facet1, facetT *facet2);
00150 void    qh_mergevertex_neighbors(facetT *facet1, facetT *facet2);
00151 void    qh_mergevertices(setT *vertices1, setT **vertices);
00152 setT   *qh_neighbor_intersections (vertexT *vertex);
00153 void    qh_newvertices (setT *vertices);
00154 boolT   qh_reducevertices (void);
00155 vertexT *qh_redundant_vertex (vertexT *vertex);
00156 boolT   qh_remove_extravertices (facetT *facet);
00157 vertexT *qh_rename_sharedvertex (vertexT *vertex, facetT *facet);
00158 void    qh_renameridgevertex(ridgeT *ridge, vertexT *oldvertex, vertexT *newvertex);
00159 void    qh_renamevertex(vertexT *oldvertex, vertexT *newvertex, setT *ridges,
00160                         facetT *oldfacet, facetT *neighborA);
00161 boolT   qh_test_appendmerge (facetT *facet, facetT *neighbor);
00162 boolT   qh_test_vneighbors (void /* qh newfacet_list */);
00163 void    qh_tracemerge (facetT *facet1, facetT *facet2);
00164 void    qh_tracemerging (void);
00165 void    qh_updatetested( facetT *facet1, facetT *facet2);
00166 setT   *qh_vertexridges (vertexT *vertex);
00167 void    qh_vertexridges_facet (vertexT *vertex, facetT *facet, setT **ridges);
00168 void    qh_willdelete (facetT *facet, facetT *replace);
00169 
00170 #endif /* qhDEFmerge */
 

Powered by Plone

This site conforms to the following standards: