00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef BSMESH_H
00012 #define BSMESH_H
00013
00014 #ifndef PKVARIA_H
00015 #include "pkvaria.h"
00016 #endif
00017
00018 #ifndef PKGEOM_H
00019 #include "pkgeom.h"
00020 #endif
00021
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025
00026
00027 typedef struct {
00028 char degree;
00029 int firsthalfedge;
00030 } BSMfacet, BSMvertex;
00031
00032 typedef struct {
00033 int v0, v1;
00034 int facetnum;
00035 int otherhalf;
00036 } BSMhalfedge;
00037
00038
00039 typedef struct {
00040 byte el_type;
00041
00042 byte degree;
00043 byte snet_rad;
00044 short snet_nvert;
00045 int first_snet_vertex;
00046 } bsm_special_el;
00047
00048 typedef struct {
00049 int nspecials;
00050 int nspvert;
00051 int nextravert;
00052 bsm_special_el *spel;
00053 int *spvert;
00054
00055 } bsm_special_elem_list;
00056
00057
00058 boolean bsm_CheckMeshIntegrity ( int nv, const BSMvertex *mv, const int *mvhei,
00059 int nhe, const BSMhalfedge *mhe,
00060 int nfac, const BSMfacet *mfac, const int *mfhei );
00061
00062 void bsm_TagMesh ( int nv, BSMvertex *mv, int *mvhei,
00063 int nhe, BSMhalfedge *mhe,
00064 int nfac, BSMfacet *mfac, int *mfhei,
00065 char *vtag, char *ftag,
00066 int *vi, int *vb, int *ei, int *eb );
00067
00068 boolean bsm_DoublingNum ( int inv, BSMvertex *imv, int *imvhei,
00069 int inhe, BSMhalfedge *imhe,
00070 int infac, BSMfacet *imfac, int *imfhei,
00071 int *onv, int *onhe, int *onfac );
00072 boolean bsm_Doublingd ( int spdimen,
00073 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00074 int inhe, BSMhalfedge *imhe,
00075 int infac, BSMfacet *imfac, int *imfhei,
00076 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00077 int *onhe, BSMhalfedge *omhe,
00078 int *onfac, BSMfacet *omfac, int *omfhei );
00079
00080 int bsm_DoublingMatSize ( int inv, BSMvertex *imv, int *imvhei,
00081 int inhe, BSMhalfedge *imhe,
00082 int infac, BSMfacet *imfac, int *imfhei );
00083 boolean bsm_DoublingMatd ( int inv, BSMvertex *imv, int *imvhei,
00084 int inhe, BSMhalfedge *imhe,
00085 int infac, BSMfacet *imfac, int *imfhei,
00086 int *onv, BSMvertex *omv, int *omvhei,
00087 int *onhe, BSMhalfedge *omhe,
00088 int *onfac, BSMfacet *omfac, int *omfhei,
00089 int *ndmat, index2 *dmi, double *dmc );
00090
00091 boolean bsm_AveragingNum ( int inv, BSMvertex *imv, int *imvhei,
00092 int inhe, BSMhalfedge *imhe,
00093 int infac, BSMfacet *imfac, int *imfhei,
00094 int *onv, int *onhe, int *onfac );
00095 boolean bsm_Averagingd ( int spdimen,
00096 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00097 int inhe, BSMhalfedge *imhe,
00098 int infac, BSMfacet *imfac, int *imfhei,
00099 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00100 int *onhe, BSMhalfedge *omhe,
00101 int *onfac, BSMfacet *omfac, int *omfhei );
00102
00103 int bsm_AveragingMatSize ( int inv, BSMvertex *imv, int *imvhei,
00104 int inhe, BSMhalfedge *imhe,
00105 int infac, BSMfacet *imfac, int *imfhei );
00106 boolean bsm_AveragingMatd ( int inv, BSMvertex *imv, int *imvhei,
00107 int inhe, BSMhalfedge *imhe,
00108 int infac, BSMfacet *imfac, int *imfhei,
00109 int *onv, BSMvertex *omv, int *omvhei,
00110 int *onhe, BSMhalfedge *omhe,
00111 int *onfac, BSMfacet *omfac, int *omfhei,
00112 int *namat, index2 *ami, double *amc );
00113
00114 boolean bsm_RefineBSMeshd ( int spdimen, int degree,
00115 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00116 int inhe, BSMhalfedge *imhe,
00117 int infac, BSMfacet *imfac, int *imfhei,
00118 int *onv, BSMvertex **omv, int **omvhei, double **optc,
00119 int *onhe, BSMhalfedge **omhe,
00120 int *onfac, BSMfacet **omfac, int **omfhei );
00121
00122 boolean bsm_RefinementMatd ( int degree,
00123 int inv, BSMvertex *imv, int *imvhei,
00124 int inhe, BSMhalfedge *imhe,
00125 int infac, BSMfacet *imfac, int *imfhei,
00126 int *onv, BSMvertex **omv, int **omvhei,
00127 int *onhe, BSMhalfedge **omhe,
00128 int *onfac, BSMfacet **omfac, int **omfhei,
00129 int *nrmat, index2 **rmi, double **rmc );
00130
00131 void bsm_MergeMeshesd ( int spdimen,
00132 int nv1, BSMvertex *mv1, int *mvhei1, double *vpc1,
00133 int nhe1, BSMhalfedge *mhe1,
00134 int nfac1, BSMfacet *mfac1, int *mfhei1,
00135 int nv2, BSMvertex *mv2, int *mvhei2, double *vpc2,
00136 int nhe2, BSMhalfedge *mhe2,
00137 int nfac2, BSMfacet *mfac2, int *mfhei2,
00138 int *onv, BSMvertex *omv, int *omvhei, double *ovpc,
00139 int *onhe, BSMhalfedge *omhe,
00140 int *onfac, BSMfacet *omfac, int *omfhei );
00141
00142 boolean bsm_RemoveFacetNum ( int inv, BSMvertex *imv, int *imvhei,
00143 int inhe, BSMhalfedge *imhe,
00144 int infac, BSMfacet *imfac, int *imfhei,
00145 int nfr,
00146 int *onv, int *onhe, int *onfac );
00147 boolean bsm_RemoveFacetd ( int spdimen,
00148 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00149 int inhe, BSMhalfedge *imhe,
00150 int infac, BSMfacet *imfac, int *imfhei,
00151 int nfr,
00152 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00153 int *onhe, BSMhalfedge *omhe,
00154 int *onfac, BSMfacet *omfac, int *omfhei );
00155
00156 void bsm_FacetEdgeDoublingNum ( int inv, BSMvertex *imv, int *imvhei,
00157 int inhe, BSMhalfedge *imhe,
00158 int infac, BSMfacet *imfac, int *imfhei,
00159 int fn,
00160 int *onv, int *onhe, int *onfac );
00161 boolean bsm_FacetEdgeDoublingd ( int spdimen,
00162 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00163 int inhe, BSMhalfedge *imhe,
00164 int infac, BSMfacet *imfac, int *imfhei,
00165 int fn,
00166 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00167 int *onhe, BSMhalfedge *omhe,
00168 int *onfac, BSMfacet *omfac, int *omfhei );
00169
00170 void bsm_RemoveVertexNum ( int inv, BSMvertex *imv, int *imvhei,
00171 int inhe, BSMhalfedge *imhe,
00172 int infac, BSMfacet *imfac, int *imfhei,
00173 int nvr,
00174 int *onv, int *onhe, int *onfac );
00175 boolean bsm_RemoveVertexd ( int spdimen,
00176 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00177 int inhe, BSMhalfedge *imhe,
00178 int infac, BSMfacet *imfac, int *imfhei,
00179 int nvr,
00180 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00181 int *onhe, BSMhalfedge *omhe,
00182 int *onfac, BSMfacet *omfac, int *omfhei );
00183
00184 void bsm_ContractEdgeNum ( int inv, BSMvertex *imv, int *imvhei,
00185 int inhe, BSMhalfedge *imhe,
00186 int infac, BSMfacet *imfac, int *imfhei,
00187 int nche,
00188 int *onv, int *onhe, int *onfac );
00189 int bsm_ContractEdged ( int spdimen,
00190 int inv, BSMvertex *imv, int *imvhei, double *iptc,
00191 int inhe, BSMhalfedge *imhe,
00192 int infac, BSMfacet *imfac, int *imfhei,
00193 int nche,
00194 int *onv, BSMvertex *omv, int *omvhei, double *optc,
00195 int *onhe, BSMhalfedge *omhe,
00196 int *onfac, BSMfacet *omfac, int *omfhei );
00197
00198
00199
00200 boolean bsm_FindRegularSubnets ( int nv, BSMvertex *mv, int *mvhei,
00201 int nhe, BSMhalfedge *mhe,
00202 int nfac, BSMfacet *mfac, int *mfhei,
00203 int d, void *usrptr,
00204 void (*output)( int d, int *vertnum, int *mtab,
00205 void *usrptr ) );
00206 boolean bsm_FindSpecialVSubnets ( int nv, BSMvertex *mv, int *mvhei,
00207 int nhe, BSMhalfedge *mhe,
00208 int nfac, BSMfacet *mfac, int *mfhei,
00209 int d, void *usrptr,
00210 void (*output)( int d, int k, int *vertnum,
00211 int *mtab, void *usrptr ) );
00212 boolean bsm_FindSpecialFSubnets ( int nv, BSMvertex *mv, int *mvhei,
00213 int nhe, BSMhalfedge *mhe,
00214 int nfac, BSMfacet *mfac, int *mfhei,
00215 int d, void *usrptr,
00216 void (*output)( int d, int k, int *vertnum,
00217 int *mtab, void *usrptr ) );
00218
00219 boolean bsm_CountSpecialVSubnets ( int nv, BSMvertex *mv, int *mvhei,
00220 int nhe, BSMhalfedge *mhe,
00221 int nfac, BSMfacet *mfac, int *mfhei,
00222 byte snet_rad,
00223 int *nspecials, int *nspvert );
00224 boolean bsm_FindSpecialVSubnetList ( int nv, BSMvertex *mv, int *mvhei,
00225 int nhe, BSMhalfedge *mhe,
00226 int nfac, BSMfacet *mfac, int *mfhei,
00227 byte snet_rad,
00228 boolean append,
00229 bsm_special_elem_list *list );
00230
00231 boolean bsm_CountSpecialFSubnets ( int nv, BSMvertex *mv, int *mvhei,
00232 int nhe, BSMhalfedge *mhe,
00233 int nfac, BSMfacet *mfac, int *mfhei,
00234 byte snet_rad,
00235 int *nspecials, int *nspvert );
00236 boolean bsm_FindSpecialFSubnetLists ( int nv, BSMvertex *mv, int *mvhei,
00237 int nhe, BSMhalfedge *mhe,
00238 int nfac, BSMfacet *mfac, int *mfhei,
00239 boolean append,
00240 byte snet_rad,
00241 bsm_special_elem_list *list );
00242
00243
00244
00245 void bsm_TagBoundaryZoneVertices ( int nv, BSMvertex *mv, int *mvhei,
00246 int nhe, BSMhalfedge *mhe,
00247 char d, char *vtag );
00248
00249
00250
00251 boolean bsm_FindVertexDistances1 ( int nv, BSMvertex *mv, int *mvhei,
00252 int nhe, BSMhalfedge *mhe,
00253 int nfac, BSMfacet *mfac, int *mfhei,
00254 int v, int *dist );
00255
00256
00257
00258 boolean bsm_FindVertexDistances2 ( int nv, BSMvertex *mv, int *mvhei,
00259 int nhe, BSMhalfedge *mhe,
00260 int nfac, BSMfacet *mfac, int *mfhei,
00261 int v, int *dist );
00262
00263
00264 int bsm_HalfedgeLoopLength ( int nv, BSMvertex *mv, int *mvhei,
00265 int nhe, BSMhalfedge *mhe,
00266 int he );
00267
00268 boolean bsm_GlueHalfedgeLoopsd ( int spdimen,
00269 int inv, BSMvertex *imv, int *imvhei, double *ivc,
00270 int inhe, BSMhalfedge *imhe,
00271 int infac, BSMfacet *imfac, int *imfhei,
00272 int he1, int he2,
00273 int *onv, BSMvertex *omv, int *omvhei, double *ovc,
00274 int *onhe, BSMhalfedge *omhe,
00275 int *onfac, BSMfacet *omfac, int *omfhei );
00276
00277 #ifdef __cplusplus
00278 }
00279 #endif
00280
00281 #endif
00282