Changeset 5401
- Timestamp:
- 08/19/10 09:38:48 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Bamg
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/AdjacentTriangle.cpp
r5148 r5401 16 16 /*FUNCTION AdjacentTriangle::Locked {{{1*/ 17 17 int AdjacentTriangle::Locked() const { 18 return t->AdjEdge Number[a] & 4;18 return t->AdjEdgeIndex[a] & 4; 19 19 } 20 20 /*}}}*/ 21 21 /*FUNCTION AdjacentTriangle::MarkUnSwap {{{1*/ 22 22 int AdjacentTriangle::MarkUnSwap() const { 23 return t->AdjEdge Number[a] & 8;23 return t->AdjEdgeIndex[a] & 8; 24 24 } 25 25 /*}}}*/ … … 27 27 int AdjacentTriangle::GetAllFlag_UnSwap() const { 28 28 // take all flag except MarkUnSwap 29 return t->AdjEdge Number[a] & 1012;29 return t->AdjEdgeIndex[a] & 1012; 30 30 } 31 31 /*}}}*/ … … 65 65 if(t) { 66 66 t->adj[a]=ta.t; 67 t->AdjEdge Number[a]=ta.a|l;67 t->AdjEdgeIndex[a]=ta.a|l; 68 68 } 69 69 if(ta.t) { 70 70 ta.t->adj[ta.a] = t ; 71 ta.t->AdjEdge Number[ta.a] = a| l ;71 ta.t->AdjEdgeIndex[ta.a] = a| l ; 72 72 } 73 73 } -
issm/trunk/src/c/objects/Bamg/Curve.cpp
r5400 r5401 16 16 FirstVertexIndex=0; 17 17 LastVertexIndex=0; 18 next=NULL;19 18 } 20 19 /*}}}*/ … … 33 32 FirstEdge = GhNew.edges + Gh.GetId(FirstEdge); 34 33 LastEdge = GhNew.edges + Gh.GetId(LastEdge); 35 if(next) next= GhNew.curves + Gh.GetId(next);36 34 } 37 35 /*}}}*/ -
issm/trunk/src/c/objects/Bamg/Curve.h
r5400 r5401 17 17 int FirstVertexIndex; //Last vertex index in the last edge 18 18 int LastVertexIndex; //First Vertex index in the first edge 19 Curve* next; // next curve equi to this20 19 21 20 //Methods -
issm/trunk/src/c/objects/Bamg/GeometricalEdge.h
r5340 r5401 18 18 R2 tg[2]; // the 2 tangentes (tg[0] =0 => no continuity) 19 19 GeometricalEdge *Adj[2]; 20 int AdjVertex Number[2]; // for a given vertex, this gives the index of the vertex in the adjacent edge (0 or 1)20 int AdjVertexIndex[2]; // for a given vertex, this gives the index of the vertex in the adjacent edge (0 or 1) 21 21 int type; 22 22 -
issm/trunk/src/c/objects/Bamg/Geometry.cpp
r5400 r5401 151 151 edges[i].tg[0]=zerovector; 152 152 edges[i].tg[1]=zerovector; 153 edges[i].AdjVertex Number[0] = edges[i].AdjVertexNumber[1] = -1;153 edges[i].AdjVertexIndex[0] = edges[i].AdjVertexIndex[1] = -1; 154 154 edges[i].Adj[0] = edges[i].Adj[1] = NULL; 155 155 edges[i].type = 0; … … 697 697 698 698 edges[i1].Adj[j1] = edges + i; 699 edges[i1].AdjVertex Number[j1] = j;699 edges[i1].AdjVertexIndex[j1] = j; 700 700 } 701 701 } … … 719 719 * previous and next vertices connected to current vertex 720 720 * normed by the edge length*/ 721 tg = edges[i].v[1-j]->r - edges[i].Adj[j]->v[1-edges[i].AdjVertex Number[j]]->r;721 tg = edges[i].v[1-j]->r - edges[i].Adj[j]->v[1-edges[i].AdjVertexIndex[j]]->r; 722 722 ltg= Norme2(tg); 723 723 tg = tg *(lAB/ltg); … … 786 786 //else: go to next edge (adjacent) 787 787 else{ 788 k0 = e->AdjVertex Number[k1];// vertex in next edge788 k0 = e->AdjVertexIndex[k1];// vertex in next edge 789 789 e = e->Adj[k1]; // next edge 790 790 } … … 873 873 ge[--bge] =eg0 = eg0->Adj[direction0]; 874 874 ISSMASSERT(bge>=0 && bge<=mxe); 875 direction0 = 1-( directionge[bge] = tmpge->AdjVertex Number[direction0]);875 direction0 = 1-( directionge[bge] = tmpge->AdjVertexIndex[direction0]); 876 876 } 877 877 while (eg1 != (GeometricalEdge*) vg1 && (*eg1)(direction1) != (GeometricalVertex*) vg1) { … … 889 889 GeometricalEdge* tmpge = eg1; 890 890 ge[++tge] =eg1 = eg1->Adj[direction1]; 891 directionge[tge]= direction1 = 1-tmpge->AdjVertex Number[direction1];891 directionge[tge]= direction1 = 1-tmpge->AdjVertexIndex[direction1]; 892 892 ISSMASSERT(tge>=0 && tge<=mxe); 893 893 } -
issm/trunk/src/c/objects/Bamg/Mesh.cpp
r5400 r5401 5110 5110 if (b->Required() ) break; 5111 5111 int kprev=k; 5112 k = e->AdjVertex Number[kprev];// next vertices5112 k = e->AdjVertexIndex[kprev];// next vertices 5113 5113 e = e->Adj[kprev]; 5114 5114 ISSMASSERT(e); … … 5329 5329 for(int phase=0;phase<=step;phase++){ 5330 5330 5331 /*Loop over all curves from icurve till the last curve*/ 5332 for(Curve *curve= Gh.curves+icurve;curve;curve= curve->next){ 5333 5334 /*Get index of current curve*/ 5335 int icurveequi= Gh.GetId(curve); 5336 5337 /*For phase 0, check that we are at the begining of the curve only*/ 5338 if(phase==0 && icurveequi!=icurve) continue; 5339 5340 int k0=jedge,k1; 5341 Edge* pe= BTh.edges+iedge; 5342 int iedgeequi=bcurve[icurveequi]/2; 5343 int jedgeequi=bcurve[icurveequi]%2; 5344 5345 int k0equi=jedgeequi,k1equi; 5346 Edge * peequi= BTh.edges+iedgeequi; 5347 GeometricalEdge *ongequi = peequi->GeometricalEdgeHook; 5348 5349 double sNew=Lstep;// abscisse of the new points (phase==1) 5350 L=0;// length of the curve 5351 long i=0;// index of new points on the curve 5352 register GeometricalVertex * GA0 = *(*peequi)[k0equi].GeometricalEdgeHook; 5353 BamgVertex *A0; 5354 A0 = GA0->to; // the vertex in new mesh 5355 BamgVertex *A1; 5356 VertexOnGeom *GA1; 5357 Edge* PreviousNewEdge = 0; 5358 5359 // New Curve phase 5360 ISSMASSERT(A0-vertices>=0 && A0-vertices<nbv); 5361 if(ongequi->Required()){ 5362 GeometricalVertex *GA1 = *(*peequi)[1-k0equi].GeometricalEdgeHook; 5363 A1 = GA1->to; // 5364 } 5365 else { 5366 for(;;){ 5367 Edge &ee=*pe; 5368 Edge &eeequi=*peequi; 5369 k1 = 1-k0; // next vertex of the edge 5370 k1equi= 1 - k0equi; 5371 ISSMASSERT(pe && ee.GeometricalEdgeHook); 5372 ee.GeometricalEdgeHook->SetMark(); 5373 BamgVertex & v0=ee[0], & v1=ee[1]; 5374 R2 AB=(R2)v1-(R2)v0; 5375 double L0=L,LAB; 5376 LAB=LengthInterpole(v0.m,v1.m,AB); 5377 L+= LAB; 5378 5379 if (phase){ 5380 // computation of the new points for the given curve 5381 while ((i!=NbCreatePointOnCurve) && sNew<=L) { 5382 5383 //some checks 5384 ISSMASSERT(sNew>=L0); 5385 ISSMASSERT(LAB); 5386 ISSMASSERT(vertices && nbv<maxnbv); 5387 ISSMASSERT(edges && nbe<nbex); 5388 ISSMASSERT(VerticesOnGeomEdge && NbVerticesOnGeomEdge<NbVerticesOnGeomEdgex); 5389 5390 // new vertex on edge 5391 A1=vertices+nbv++; 5392 GA1=VerticesOnGeomEdge+NbVerticesOnGeomEdge; 5393 Edge* e = edges + nbe++; 5394 double se= (sNew-L0)/LAB; 5395 if (se<0 || se>=1.000000001){ 5396 ISSMERROR("Problem creating point on a boundary: se=%g should be in [0 1]",se); 5397 } 5398 se = abscisseInterpole(v0.m,v1.m,AB,se,1); 5399 if (se<0 || se>1){ 5400 ISSMERROR("Problem creating point on a boundary: se=%g should be in [0 1]",se); 5401 } 5402 se = k1 ? se : 1. - se; 5403 se = k1==k1equi ? se : 1. - se; 5404 VertexOnBThEdge[NbVerticesOnGeomEdge++] = VertexOnEdge(A1,&eeequi,se); // save 5405 ongequi=Gh.ProjectOnCurve(eeequi,se,*A1,*GA1); 5406 A1->ReferenceNumber = eeequi.ReferenceNumber; 5407 A1->DirOfSearch =NoDirOfSearch; 5408 e->GeometricalEdgeHook = ongequi; 5409 e->v[0]=A0; 5410 e->v[1]=A1; 5411 e->ReferenceNumber = eeequi.ReferenceNumber; 5412 e->adj[0]=PreviousNewEdge; 5413 5414 if (PreviousNewEdge) PreviousNewEdge->adj[1]=e; 5415 PreviousNewEdge=e; 5416 A0=A1; 5417 sNew += Lstep; 5418 if (++i== NbCreatePointOnCurve) break; 5331 /*Current curve pointer*/ 5332 Curve *curve= Gh.curves+icurve; 5333 5334 /*Get index of current curve*/ 5335 int icurveequi= Gh.GetId(curve); 5336 5337 /*For phase 0, check that we are at the begining of the curve only*/ 5338 if(phase==0 && icurveequi!=icurve) continue; 5339 5340 int k0=jedge,k1; 5341 Edge* pe= BTh.edges+iedge; 5342 int iedgeequi=bcurve[icurveequi]/2; 5343 int jedgeequi=bcurve[icurveequi]%2; 5344 5345 int k0equi=jedgeequi,k1equi; 5346 Edge * peequi= BTh.edges+iedgeequi; 5347 GeometricalEdge *ongequi = peequi->GeometricalEdgeHook; 5348 5349 double sNew=Lstep;// abscisse of the new points (phase==1) 5350 L=0;// length of the curve 5351 long i=0;// index of new points on the curve 5352 register GeometricalVertex * GA0 = *(*peequi)[k0equi].GeometricalEdgeHook; 5353 BamgVertex *A0; 5354 A0 = GA0->to; // the vertex in new mesh 5355 BamgVertex *A1; 5356 VertexOnGeom *GA1; 5357 Edge* PreviousNewEdge = 0; 5358 5359 // New Curve phase 5360 ISSMASSERT(A0-vertices>=0 && A0-vertices<nbv); 5361 if(ongequi->Required()){ 5362 GeometricalVertex *GA1 = *(*peequi)[1-k0equi].GeometricalEdgeHook; 5363 A1 = GA1->to; // 5364 } 5365 else { 5366 for(;;){ 5367 Edge &ee=*pe; 5368 Edge &eeequi=*peequi; 5369 k1 = 1-k0; // next vertex of the edge 5370 k1equi= 1 - k0equi; 5371 ISSMASSERT(pe && ee.GeometricalEdgeHook); 5372 ee.GeometricalEdgeHook->SetMark(); 5373 BamgVertex & v0=ee[0], & v1=ee[1]; 5374 R2 AB=(R2)v1-(R2)v0; 5375 double L0=L,LAB; 5376 LAB=LengthInterpole(v0.m,v1.m,AB); 5377 L+= LAB; 5378 5379 if (phase){ 5380 // computation of the new points for the given curve 5381 while ((i!=NbCreatePointOnCurve) && sNew<=L) { 5382 5383 //some checks 5384 ISSMASSERT(sNew>=L0); 5385 ISSMASSERT(LAB); 5386 ISSMASSERT(vertices && nbv<maxnbv); 5387 ISSMASSERT(edges && nbe<nbex); 5388 ISSMASSERT(VerticesOnGeomEdge && NbVerticesOnGeomEdge<NbVerticesOnGeomEdgex); 5389 5390 // new vertex on edge 5391 A1=vertices+nbv++; 5392 GA1=VerticesOnGeomEdge+NbVerticesOnGeomEdge; 5393 Edge* e = edges + nbe++; 5394 double se= (sNew-L0)/LAB; 5395 if (se<0 || se>=1.000000001){ 5396 ISSMERROR("Problem creating point on a boundary: se=%g should be in [0 1]",se); 5419 5397 } 5398 se = abscisseInterpole(v0.m,v1.m,AB,se,1); 5399 if (se<0 || se>1){ 5400 ISSMERROR("Problem creating point on a boundary: se=%g should be in [0 1]",se); 5401 } 5402 se = k1 ? se : 1. - se; 5403 se = k1==k1equi ? se : 1. - se; 5404 VertexOnBThEdge[NbVerticesOnGeomEdge++] = VertexOnEdge(A1,&eeequi,se); // save 5405 ongequi=Gh.ProjectOnCurve(eeequi,se,*A1,*GA1); 5406 A1->ReferenceNumber = eeequi.ReferenceNumber; 5407 A1->DirOfSearch =NoDirOfSearch; 5408 e->GeometricalEdgeHook = ongequi; 5409 e->v[0]=A0; 5410 e->v[1]=A1; 5411 e->ReferenceNumber = eeequi.ReferenceNumber; 5412 e->adj[0]=PreviousNewEdge; 5413 5414 if (PreviousNewEdge) PreviousNewEdge->adj[1]=e; 5415 PreviousNewEdge=e; 5416 A0=A1; 5417 sNew += Lstep; 5418 if (++i== NbCreatePointOnCurve) break; 5420 5419 } 5421 5422 //some checks 5423 ISSMASSERT(ee.GeometricalEdgeHook->CurveNumber==ei.GeometricalEdgeHook->CurveNumber);5424 if (ee[k1].GeometricalEdgeHook->IsRequiredVertex()) {5425 ISSMASSERT(eeequi[k1equi].GeometricalEdgeHook->IsRequiredVertex());5426 register GeometricalVertex * GA1 = *eeequi[k1equi].GeometricalEdgeHook;5427 A1=GA1->to;// the vertex in new mesh5428 ISSMASSERT(A1-vertices>=0 && A1-vertices<nbv);5429 break;5430 }5431 if (!ee.adj[k1]) {5432 ISSMERROR(" adj edge %i, nbe=%i, Gh.vertices=%i",BTh.GetId(ee),nbe,Gh.vertices);5433 }5434 pe = ee.adj[k1]; // next edge5435 k0 = pe->Intersection(ee);5436 peequi= eeequi.adj[k1equi]; // next edge5437 k0equi=peequi->Intersection(eeequi);5438 }// for(;;) end of the curve5439 } 5440 5441 5442 if (phase){ // construction of the last edge 5443 Edge* e=edges + nbe++;5444 e->GeometricalEdgeHook = ongequi;5445 e->v[0]=A0;5446 e->v[1]=A1;5447 e->ReferenceNumber = peequi->ReferenceNumber;5448 e->adj[0]=PreviousNewEdge;5449 e->adj[1]=0;5450 if (PreviousNewEdge) PreviousNewEdge->adj[1]=e;5451 PreviousNewEdge =e;5452 5453 ISSMASSERT(i==NbCreatePointOnCurve); 5454 }5455 } // end loop on equi curve5420 } 5421 5422 //some checks 5423 ISSMASSERT(ee.GeometricalEdgeHook->CurveNumber==ei.GeometricalEdgeHook->CurveNumber); 5424 if (ee[k1].GeometricalEdgeHook->IsRequiredVertex()) { 5425 ISSMASSERT(eeequi[k1equi].GeometricalEdgeHook->IsRequiredVertex()); 5426 register GeometricalVertex * GA1 = *eeequi[k1equi].GeometricalEdgeHook; 5427 A1=GA1->to;// the vertex in new mesh 5428 ISSMASSERT(A1-vertices>=0 && A1-vertices<nbv); 5429 break; 5430 } 5431 if (!ee.adj[k1]) { 5432 ISSMERROR(" adj edge %i, nbe=%i, Gh.vertices=%i",BTh.GetId(ee),nbe,Gh.vertices); 5433 } 5434 pe = ee.adj[k1]; // next edge 5435 k0 = pe->Intersection(ee); 5436 peequi= eeequi.adj[k1equi]; // next edge 5437 k0equi=peequi->Intersection(eeequi); 5438 }// for(;;) end of the curve 5439 } 5440 5441 5442 if (phase){ // construction of the last edge 5443 Edge* e=edges + nbe++; 5444 e->GeometricalEdgeHook = ongequi; 5445 e->v[0]=A0; 5446 e->v[1]=A1; 5447 e->ReferenceNumber = peequi->ReferenceNumber; 5448 e->adj[0]=PreviousNewEdge; 5449 e->adj[1]=0; 5450 if (PreviousNewEdge) PreviousNewEdge->adj[1]=e; 5451 PreviousNewEdge = e; 5452 5453 ISSMASSERT(i==NbCreatePointOnCurve); 5454 } 5456 5455 5457 5456 if (!phase) { // … … 5460 5459 Lcurve = L; 5461 5460 NbCreatePointOnCurve = NbSegOnCurve-1; 5462 5463 for(Curve * curve= Gh.curves+icurve;curve;curve= curve->next){ 5464 NbOfNewEdge += NbSegOnCurve; 5465 NbOfNewPoints += NbCreatePointOnCurve; 5466 } 5461 NbOfNewEdge += NbSegOnCurve; 5462 NbOfNewPoints += NbCreatePointOnCurve; 5467 5463 } 5468 5464 } -
issm/trunk/src/c/objects/Bamg/Mesh.h
r5340 r5401 170 170 } 171 171 inline void Adj(GeometricalEdge * & on,int &i){ 172 int j=i;i=on->AdjVertex Number[i];on=on->Adj[j];172 int j=i;i=on->AdjVertexIndex[i];on=on->Adj[j]; 173 173 } 174 174 inline double qualite(const BamgVertex &va,const BamgVertex &vb,const BamgVertex &vc){ -
issm/trunk/src/c/objects/Bamg/Triangle.cpp
r5187 r5401 23 23 vertices[2]=v+k; 24 24 adj[0]=adj[1]=adj[2]=0; 25 AdjEdge Number[0]=AdjEdgeNumber[1]=AdjEdgeNumber[2]=0;25 AdjEdgeIndex[0]=AdjEdgeIndex[1]=AdjEdgeIndex[2]=0; 26 26 det=0; 27 27 } … … 33 33 vertices[2]=v2; 34 34 adj[0]=adj[1]=adj[2]=0; 35 AdjEdge Number[0]=AdjEdgeNumber[1]=AdjEdgeNumber[2]=0;35 AdjEdgeIndex[0]=AdjEdgeIndex[1]=AdjEdgeIndex[2]=0; 36 36 if (v0) det=0; 37 37 else { … … 44 44 /*FUNCTION Triangle::Adj{{{1*/ 45 45 AdjacentTriangle Triangle::Adj(int i) const { 46 return AdjacentTriangle(adj[i],AdjEdge Number[i]&3);46 return AdjacentTriangle(adj[i],AdjEdgeIndex[i]&3); 47 47 };/*}}}*/ 48 48 /*FUNCTION Triangle::Echo {{{1*/ … … 112 112 t = ttc; 113 113 //NextEdge[3] = {1,2,0}; 114 jc = NextEdge[t->AdjEdge Number[j]&3];114 jc = NextEdge[t->AdjEdgeIndex[j]&3]; 115 115 j = NextEdge[jc]; 116 116 … … 126 126 /*FUNCTION Triangle::GetAllflag{{{1*/ 127 127 int Triangle::GetAllflag(int a){ 128 return AdjEdge Number[a] & 1020;128 return AdjEdgeIndex[a] & 1020; 129 129 }/*}}}*/ 130 130 /*FUNCTION Triangle::Hidden{{{1*/ 131 131 int Triangle::Hidden(int a)const { 132 return AdjEdge Number[a]&16;132 return AdjEdgeIndex[a]&16; 133 133 } /*}}}*/ 134 134 /*FUNCTION Triangle::Locked{{{1*/ 135 135 int Triangle::Locked(int a)const { 136 return AdjEdge Number[a]&4;136 return AdjEdgeIndex[a]&4; 137 137 } /*}}}*/ 138 138 /*FUNCTION Triangle::NuEdgeTriangleAdj{{{1*/ 139 139 short Triangle::NuEdgeTriangleAdj(int i) const { 140 140 /*Number of the adjacent edge in adj tria (make sure it is between 0 and 2*/ 141 return AdjEdge Number[i&3]&3;141 return AdjEdgeIndex[i&3]&3; 142 142 }/*}}}*/ 143 143 /*FUNCTION Triangle::Optim{{{1*/ … … 154 154 // initialize tp, jp the previous triangle & edge 155 155 Triangle *tp=adj[jp]; 156 jp = AdjEdge Number[jp]&3;156 jp = AdjEdgeIndex[jp]&3; 157 157 do { 158 158 while (t->swap(j,koption)){ … … 161 161 k++; 162 162 t= tp->adj[jp]; // set unchange t qnd j for previous triangles 163 j= NextEdge[tp->AdjEdge Number[jp]&3];163 j= NextEdge[tp->AdjEdgeIndex[jp]&3]; 164 164 } 165 165 // end on this Triangle … … 168 168 169 169 t= tp->adj[jp]; // set unchange t qnd j for previous triangles 170 j= NextEdge[tp->AdjEdge Number[jp]&3];170 j= NextEdge[tp->AdjEdgeIndex[jp]&3]; 171 171 172 172 } while( t != this); … … 180 180 if (link) { 181 181 int a=-1; 182 if (AdjEdge Number[0] & 16 ) a=0;183 if (AdjEdge Number[1] & 16 ) a=1;184 if (AdjEdge Number[2] & 16 ) a=2;182 if (AdjEdgeIndex[0] & 16 ) a=0; 183 if (AdjEdgeIndex[1] & 16 ) a=1; 184 if (AdjEdgeIndex[2] & 16 ) a=2; 185 185 if (a>=0) { 186 186 t = adj[a]; … … 189 189 v0 = vertices[VerticesOfTriangularEdge[a][1]]; 190 190 v1 = vertices[OppositeEdge[a]]; 191 v3 = t->vertices[OppositeEdge[AdjEdge Number[a]&3]];191 v3 = t->vertices[OppositeEdge[AdjEdgeIndex[a]&3]]; 192 192 } 193 193 } … … 198 198 double Triangle::QualityQuad(int a,int option) const{ 199 199 double q; 200 if (!link || AdjEdge Number[a] &4)200 if (!link || AdjEdgeIndex[a] &4) 201 201 q= -1; 202 202 else { … … 204 204 if (t-this<0) q= -1;// because we do 2 times 205 205 else if (!t->link ) q= -1; 206 else if (AdjEdge Number[0] & 16 || AdjEdgeNumber[1] & 16 || AdjEdgeNumber[2] & 16 || t->AdjEdgeNumber[0] & 16 || t->AdjEdgeNumber[1] & 16 || t->AdjEdgeNumber[2] & 16 )206 else if (AdjEdgeIndex[0] & 16 || AdjEdgeIndex[1] & 16 || AdjEdgeIndex[2] & 16 || t->AdjEdgeIndex[0] & 16 || t->AdjEdgeIndex[1] & 16 || t->AdjEdgeIndex[2] & 16 ) 207 207 q= -1; 208 208 else if(option){ … … 210 210 const BamgVertex & v0 = *vertices[VerticesOfTriangularEdge[a][1]]; 211 211 const BamgVertex & v1 = *vertices[OppositeEdge[a]]; 212 const BamgVertex & v3 = * t->vertices[OppositeEdge[AdjEdge Number[a]&3]];212 const BamgVertex & v3 = * t->vertices[OppositeEdge[AdjEdgeIndex[a]&3]]; 213 213 q = QuadQuality(v0,v1,v2,v3); // do the float part 214 214 } … … 250 250 a &= 3; 251 251 register Triangle *tt=adj[a]; 252 AdjEdge Number[a] &= 55; // remove MarkUnSwap253 register short aatt = AdjEdge Number[a] & 3;252 AdjEdgeIndex [a] &= 55; // remove MarkUnSwap 253 register short aatt = AdjEdgeIndex[a] & 3; 254 254 if(tt){ 255 255 tt->adj[aatt]=this; 256 tt->AdjEdge Number[aatt]=a + (AdjEdgeNumber[a] & 60 ) ;256 tt->AdjEdgeIndex[aatt]=a + (AdjEdgeIndex[a] & 60 ) ; 257 257 } 258 258 }/*}}}*/ … … 260 260 void Triangle::SetAdj2(short a,Triangle *t,short aat){ 261 261 adj[a]=t; //the adjacent triangle to the edge a is t 262 AdjEdge Number[a]=aat; //position of the edge in the adjacent triangle262 AdjEdgeIndex[a]=aat; //position of the edge in the adjacent triangle 263 263 if(t) { //if t!=NULL add adjacent triangle to t (this) 264 264 t->adj[aat]=this; 265 t->AdjEdge Number[aat]=a;265 t->AdjEdgeIndex[aat]=a; 266 266 } 267 267 }/*}}}*/ 268 268 /*FUNCTION Triangle::SetAllFlag{{{1*/ 269 269 void Triangle::SetAllFlag(int a,int f){ 270 AdjEdge Number[a] = (AdjEdgeNumber[a] &3) + (1020 & f);270 AdjEdgeIndex[a] = (AdjEdgeIndex[a] &3) + (1020 & f); 271 271 }/*}}}*/ 272 272 /*FUNCTION Triangle::SetDet{{{1*/ … … 281 281 //if it exist 282 282 //C|=D -> C=(C|D) bitwise inclusive OR 283 if(t) t->AdjEdge Number[AdjEdgeNumber[a] & 3] |=16;284 AdjEdge Number[a] |= 16;283 if(t) t->AdjEdgeIndex[AdjEdgeIndex[a] & 3] |=16; 284 AdjEdgeIndex[a] |= 16; 285 285 }/*}}}*/ 286 286 /*FUNCTION Triangle::SetLocked{{{1*/ … … 288 288 //mark the edge as on Boundary 289 289 register Triangle * t = adj[a]; 290 t->AdjEdge Number[AdjEdgeNumber[a] & 3] |=4;291 AdjEdge Number[a] |= 4;290 t->AdjEdgeIndex[AdjEdgeIndex[a] & 3] |=4; 291 AdjEdgeIndex[a] |= 4; 292 292 }/*}}}*/ 293 293 /*FUNCTION Triangle::SetMarkUnSwap{{{1*/ 294 294 void Triangle::SetMarkUnSwap(int a){ 295 295 register Triangle * t = adj[a]; 296 t->AdjEdge Number[AdjEdgeNumber[a] & 3] |=8;297 AdjEdge Number[a] |=8 ;296 t->AdjEdgeIndex[AdjEdgeIndex[a] & 3] |=8; 297 AdjEdgeIndex[a] |=8 ; 298 298 }/*}}}*/ 299 299 /*FUNCTION Triangle::SetSingleVertexToTriangleConnectivity{{{1*/ … … 306 306 void Triangle::SetUnMarkUnSwap(int a){ 307 307 register Triangle * t = adj[a]; 308 t->AdjEdge Number[AdjEdgeNumber[a] & 3] &=55; // 23 + 32309 AdjEdge Number[a] &=55 ;308 t->AdjEdgeIndex[AdjEdgeIndex[a] & 3] &=55; // 23 + 32 309 AdjEdgeIndex[a] &=55 ; 310 310 }/*}}}*/ 311 311 /*FUNCTION Triangle::swap{{{1*/ … … 316 316 317 317 register Triangle *t1=this,*t2=adj[a];// les 2 triangles adjacent 318 register short a1=a,a2=AdjEdge Number[a];// les 2 numero de l arete dans les 2 triangles318 register short a1=a,a2=AdjEdgeIndex[a];// les 2 numero de l arete dans les 2 triangles 319 319 if(a2/4 !=0) return 0; // arete lock or MarkUnSwap 320 320 -
issm/trunk/src/c/objects/Bamg/Triangle.h
r5340 r5401 19 19 BamgVertex *vertices[3]; // 3 vertices if t is triangle, t[i] allowed by access function, (*t)[i] if pointer 20 20 Triangle *adj[3]; // 3 pointers toward the adjacent triangles 21 short AdjEdge Number[3]; // edge id in the adjacent triangles. The edge number 1 is the edge number AdjEdgeNumber[1] in the Adjacent triangle 121 short AdjEdgeIndex[3]; // edge id in the adjacent triangles. The edge number 1 is the edge number AdjEdgeIndex[1] in the Adjacent triangle 1 22 22 23 23 public:
Note:
See TracChangeset
for help on using the changeset viewer.