28static uint8_t
inxt[3] = {1,2,0};
29static uint8_t
iprev[3] = {2,0,1};
39 MMG5_int ip,iel,*adja,iadr;
42 if ( ifirst < 1 )
return 0;
43 pt = &
mesh->tria[ifirst];
44 if ( !
MG_EOK(pt) )
return 0;
46 ppt = &
mesh->point[ip];
47 if ( !
MG_VOK(ppt) )
return 0;
51 list[ilist] = 3*ifirst + iploc;
53 iadr = 3*(ifirst-1) + 1;
54 adja = &
mesh->adja[iadr];
55 iel = adja[
inxt[iploc]]/3;
56 voy = adja[
inxt[iploc]]%3;
59 while ( iel && (iel != ifirst) &&
mesh->tria[iel].v[0]){
61 list[++ilist] = 3*iel + i;
62 assert( ip==(&
mesh->tria[iel])->v[i] );
64 adja = &
mesh->adja[iadr];
65 iel = adja[
inxt[i]]/3;
66 voy = adja[
inxt[i]]%3;
71 iadr = 3*(ifirst-1) + 1;
72 adja = &
mesh->adja[iadr];
73 iel = adja[
iprev[iploc]]/3;
74 voy = adja[
iprev[iploc]]%3;
77 while ( iel && (iel != ifirst) &&
mesh->tria[iel].v[0]) {
79 list[++ilist] = 3*iel + i;
80 assert( ip==(&
mesh->tria[iel])->v[i] );
82 adja = &
mesh->adja[iadr];
83 iel = adja[
iprev[i]]/3;
85 voy = adja[
iprev[i]]%3;
118 double ux,uy,dd,n1[2],n2[2];
119 MMG5_int *adja,k,kk,refs;
126 refs =
mesh->tria[start].ref;
131 adja = &
mesh->adja[3*(k-1)+1];
135 notedg =
mesh->info.opnbdy ?
136 (!
mesh->tria[k].tag[i]) : (
mesh->tria[kk].ref == refs);
138 while ( kk && (kk != start) && notedg );
141 fprintf(stderr,
" ## Error: %s: Unable to find a boundary edge in"
142 " the ball of point %" MMG5_PRId
".\n",__func__,
MMG2D_indPt(
mesh,
mesh->tria[start].v[ip]));
151 p1 = &
mesh->point[pt->
v[i1]];
152 p2 = &
mesh->point[pt->
v[i2]];
153 ux = p2->
c[0] - p1->
c[0];
154 uy = p2->
c[1] - p1->
c[1];
158 fprintf(stderr,
"\n ## Error: %s: Null edge"
159 " length (%e).\n",__func__,dd);
176 adja = &
mesh->adja[3*(k-1)+1];
180 notedg =
mesh->info.opnbdy ?
181 !
mesh->tria[k].tag[i] :
mesh->tria[kk].ref == refs;
183 while ( kk && (kk != start) && notedg );
190 p1 = &
mesh->point[pt->
v[i1]];
191 p2 = &
mesh->point[pt->
v[i2]];
192 ux = p2->
c[0] - p1->
c[0];
193 uy = p2->
c[1] - p1->
c[1];
197 fprintf(stderr,
"\n ## Error: %s: Null edge length"
198 " (%e).\n",__func__,dd);
209 nn[0] = n1[0] + n2[0];
210 nn[1] = n1[1] + n2[1];
211 dd = nn[0]*nn[0] + nn[1]*nn[1];
235 static int8_t mmgWarn0=0;
240 if ( start < 1 )
return 0;
241 pt = &
mesh->tria[start];
242 if ( !
MG_EOK(pt) )
return 0;
255 adja = &
mesh->adja[3*(k-1)+1];
260 if ( *ip1 == 0 ) *ip1 = pt->
v[i2];
262 if ( *ip2 != 0 && *ip1 != pt->
v[i2] && *ip2 != pt->
v[i2] ) {
265 fprintf(stderr,
"\n ## Error: %s: at least 1 non singular"
266 " point at the intersection of 3 edges.\n",
271 if ( *ip1 != pt->
v[i2] ) *ip2 = pt->
v[i2];
279 if ( *ip2 != 0 && *ip1 != pt->
v[i1] && *ip2 != pt->
v[i1] ) {
282 fprintf(stderr,
"\n ## Error: %s: at least 1 non singular"
283 " point at the intersection of 3 edges.\n",
288 if ( *ip1 != pt->
v[i1] ) *ip2 = pt->
v[i1];
297 while ( k && k != start );
298 if ( k > 0 )
return ilist;
303 adja = &
mesh->adja[3*(k-1)+1];
309 if ( !k )
return ilist;
318 adja = &
mesh->adja[3*(k-1)+1];
326 if ( *ip2 != 0 && *ip1 != pt->
v[i2] && *ip2 != pt->
v[i2] ) {
329 fprintf(stderr,
"\n ## Error: %s: at least 1 non singular"
330 " point at the intersection of 3 edges.\n",
335 if ( *ip1 != pt->
v[i2] ) *ip2 = pt->
v[i2];
340 if ( *ip1 == 0 ) *ip1 = pt->
v[i1];
342 if ( *ip2 != 0 && *ip1 != pt->
v[i1] && *ip2 != pt->
v[i1] ) {
345 fprintf(stderr,
"\n ## Error: %s: at least 1 non singular"
346 " point at the intersection of 3 edges.\n",
351 if ( *ip1 != pt->
v[i1] ) *ip2 = pt->
v[i1];
int MMG2D_boulep(MMG5_pMesh mesh, MMG5_int ifirst, int iploc, MMG5_int *list)
int MMG2D_bouleendp(MMG5_pMesh mesh, MMG5_int start, int8_t ip, MMG5_int *ip1, MMG5_int *ip2, MMG5_int *list)
int MMG2D_boulen(MMG5_pMesh mesh, MMG5_int start, int8_t ip, MMG5_int *pleft, MMG5_int *pright, double *nn)
API headers and documentation for the mmg2d library.
MMG5_int MMG2D_indPt(MMG5_pMesh mesh, MMG5_int kp)
static const uint8_t MMG5_iprv2[3]
static const uint8_t MMG5_inxt2[6]