Changeset 5148 for issm/trunk/src/c/objects/Bamg/Triangle.cpp
- Timestamp:
- 08/11/10 10:38:41 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/Triangle.cpp
r5143 r5148 19 19 ISSMERROR("i>=nbv || j>=nbv || k>=nbv"); 20 20 } 21 TriaVertices[0]=v+i;22 TriaVertices[1]=v+j;23 TriaVertices[2]=v+k;24 TriaAdjTriangles[0]=TriaAdjTriangles[1]=TriaAdjTriangles[2]=0;25 TriaAdjSharedEdge[0]=TriaAdjSharedEdge[1]=TriaAdjSharedEdge[2]=0;21 vertices[0]=v+i; 22 vertices[1]=v+j; 23 vertices[2]=v+k; 24 adj[0]=adj[1]=adj[2]=0; 25 AdjEdgeNumber[0]=AdjEdgeNumber[1]=AdjEdgeNumber[2]=0; 26 26 det=0; 27 27 } … … 29 29 /*FUNCTION Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2) {{{1*/ 30 30 Triangle::Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2){ 31 TriaVertices[0]=v0;32 TriaVertices[1]=v1;33 TriaVertices[2]=v2;34 TriaAdjTriangles[0]=TriaAdjTriangles[1]=TriaAdjTriangles[2]=0;35 TriaAdjSharedEdge[0]=TriaAdjSharedEdge[1]=TriaAdjSharedEdge[2]=0;31 vertices[0]=v0; 32 vertices[1]=v1; 33 vertices[2]=v2; 34 adj[0]=adj[1]=adj[2]=0; 35 AdjEdgeNumber[0]=AdjEdgeNumber[1]=AdjEdgeNumber[2]=0; 36 36 if (v0) det=0; 37 37 else { … … 48 48 49 49 printf("Triangle:\n"); 50 printf(" TriaVertices pointer towards three vertices\n");51 printf(" TriaVertices[0] TriaVertices[1] TriaVertices[2] = %p %p %p\n",TriaVertices[0],TriaVertices[1],TriaVertices[2]);52 printf(" TriaAdjTrianglespointer towards three adjacent triangles\n");53 printf(" TriaAdjTriangles[0] TriaAdjTriangles[1] TriaAdjTriangles[2] = %p %p %p\n",TriaAdjTriangles[0],TriaAdjTriangles[1],TriaAdjTriangles[2]);50 printf(" vertices pointer towards three vertices\n"); 51 printf(" vertices[0] vertices[1] vertices[2] = %p %p %p\n",vertices[0],vertices[1],vertices[2]); 52 printf(" adj pointer towards three adjacent triangles\n"); 53 printf(" adj[0] adj[1] adj[2] = %p %p %p\n",adj[0],adj[1],adj[2]); 54 54 printf(" det (integer triangle determinant) = %i\n",det); 55 55 if (link){ … … 62 62 printf("\nThree vertices:\n"); 63 63 for(i=0;i<3;i++){ 64 if ( TriaVertices[i]){65 TriaVertices[i]->Echo();64 if (vertices[i]){ 65 vertices[i]->Echo(); 66 66 } 67 67 else{ … … 99 99 k++; 100 100 //Get ttc, adjacent triangle of t with respect to vertex j 101 ttc = t-> TriaAdjTriangles[j];101 ttc = t->adj[j]; 102 102 //is the current triangle inside or outside? 103 103 outside = !ttc->link; … … 108 108 t = ttc; 109 109 //NextEdge[3] = {1,2,0}; 110 jc = NextEdge[t-> TriaAdjSharedEdge[j]&3];110 jc = NextEdge[t->AdjEdgeNumber[j]&3]; 111 111 j = NextEdge[jc]; 112 112 … … 132 132 133 133 // initialize tp, jp the previous triangle & edge 134 Triangle *tp= TriaAdjTriangles[jp];135 jp = TriaAdjSharedEdge[jp]&3;134 Triangle *tp=adj[jp]; 135 jp = AdjEdgeNumber[jp]&3; 136 136 do { 137 137 while (t->swap(j,koption)){ … … 139 139 NbSwap++; 140 140 k++; 141 t= tp-> TriaAdjTriangles[jp]; // set unchange t qnd j for previous triangles142 j= NextEdge[tp-> TriaAdjSharedEdge[jp]&3];141 t= tp->adj[jp]; // set unchange t qnd j for previous triangles 142 j= NextEdge[tp->AdjEdgeNumber[jp]&3]; 143 143 } 144 144 // end on this Triangle … … 146 146 jp = NextEdge[j]; 147 147 148 t= tp-> TriaAdjTriangles[jp]; // set unchange t qnd j for previous triangles149 j= NextEdge[tp-> TriaAdjSharedEdge[jp]&3];148 t= tp->adj[jp]; // set unchange t qnd j for previous triangles 149 j= NextEdge[tp->AdjEdgeNumber[jp]&3]; 150 150 151 151 } while( t != this); … … 159 159 if (link) { 160 160 int a=-1; 161 if ( TriaAdjSharedEdge[0] & 16 ) a=0;162 if ( TriaAdjSharedEdge[1] & 16 ) a=1;163 if ( TriaAdjSharedEdge[2] & 16 ) a=2;161 if (AdjEdgeNumber[0] & 16 ) a=0; 162 if (AdjEdgeNumber[1] & 16 ) a=1; 163 if (AdjEdgeNumber[2] & 16 ) a=2; 164 164 if (a>=0) { 165 t = TriaAdjTriangles[a];165 t = adj[a]; 166 166 // if (t-this<0) return 0; 167 v2 = TriaVertices[VerticesOfTriangularEdge[a][0]];168 v0 = TriaVertices[VerticesOfTriangularEdge[a][1]];169 v1 = TriaVertices[OppositeEdge[a]];170 v3 = t-> TriaVertices[OppositeEdge[TriaAdjSharedEdge[a]&3]];167 v2 = vertices[VerticesOfTriangularEdge[a][0]]; 168 v0 = vertices[VerticesOfTriangularEdge[a][1]]; 169 v1 = vertices[OppositeEdge[a]]; 170 v3 = t->vertices[OppositeEdge[AdjEdgeNumber[a]&3]]; 171 171 } 172 172 } … … 177 177 double Triangle::QualityQuad(int a,int option) const{ 178 178 double q; 179 if (!link || TriaAdjSharedEdge[a] &4)179 if (!link || AdjEdgeNumber[a] &4) 180 180 q= -1; 181 181 else { 182 Triangle * t = TriaAdjTriangles[a];182 Triangle * t = adj[a]; 183 183 if (t-this<0) q= -1;// because we do 2 times 184 184 else if (!t->link ) q= -1; 185 else if ( TriaAdjSharedEdge[0] & 16 || TriaAdjSharedEdge[1] & 16 || TriaAdjSharedEdge[2] & 16 || t->TriaAdjSharedEdge[0] & 16 || t->TriaAdjSharedEdge[1] & 16 || t->TriaAdjSharedEdge[2] & 16 )185 else if (AdjEdgeNumber[0] & 16 || AdjEdgeNumber[1] & 16 || AdjEdgeNumber[2] & 16 || t->AdjEdgeNumber[0] & 16 || t->AdjEdgeNumber[1] & 16 || t->AdjEdgeNumber[2] & 16 ) 186 186 q= -1; 187 187 else if(option){ 188 const BamgVertex & v2 = * TriaVertices[VerticesOfTriangularEdge[a][0]];189 const BamgVertex & v0 = * TriaVertices[VerticesOfTriangularEdge[a][1]];190 const BamgVertex & v1 = * TriaVertices[OppositeEdge[a]];191 const BamgVertex & v3 = * t-> TriaVertices[OppositeEdge[TriaAdjSharedEdge[a]&3]];188 const BamgVertex & v2 = *vertices[VerticesOfTriangularEdge[a][0]]; 189 const BamgVertex & v0 = *vertices[VerticesOfTriangularEdge[a][1]]; 190 const BamgVertex & v1 = *vertices[OppositeEdge[a]]; 191 const BamgVertex & v3 = * t->vertices[OppositeEdge[AdjEdgeNumber[a]&3]]; 192 192 q = QuadQuality(v0,v1,v2,v3); // do the float part 193 193 } … … 200 200 void Triangle::Set(const Triangle & rec,const Mesh & Th ,Mesh & ThNew){ 201 201 *this = rec; 202 if ( TriaVertices[0] ) TriaVertices[0] = ThNew.vertices + Th.Number(TriaVertices[0]);203 if ( TriaVertices[1] ) TriaVertices[1] = ThNew.vertices + Th.Number(TriaVertices[1]);204 if ( TriaVertices[2] ) TriaVertices[2] = ThNew.vertices + Th.Number(TriaVertices[2]);205 if( TriaAdjTriangles[0]) TriaAdjTriangles[0] = ThNew.triangles + Th.Number(TriaAdjTriangles[0]);206 if( TriaAdjTriangles[1]) TriaAdjTriangles[1] = ThNew.triangles + Th.Number(TriaAdjTriangles[1]);207 if( TriaAdjTriangles[2]) TriaAdjTriangles[2] = ThNew.triangles + Th.Number(TriaAdjTriangles[2]);202 if ( vertices[0] ) vertices[0] = ThNew.vertices + Th.Number(vertices[0]); 203 if ( vertices[1] ) vertices[1] = ThNew.vertices + Th.Number(vertices[1]); 204 if ( vertices[2] ) vertices[2] = ThNew.vertices + Th.Number(vertices[2]); 205 if(adj[0]) adj[0] = ThNew.triangles + Th.Number(adj[0]); 206 if(adj[1]) adj[1] = ThNew.triangles + Th.Number(adj[1]); 207 if(adj[2]) adj[2] = ThNew.triangles + Th.Number(adj[2]); 208 208 if (link >= Th.triangles && link < Th.triangles + Th.nbt) 209 209 link = ThNew.triangles + Th.Number(link); … … 216 216 if(a/4 !=0) return 0;// arete lock or MarkUnSwap 217 217 218 register Triangle *t1=this,*t2= TriaAdjTriangles[a];// les 2 triangles adjacent219 register short a1=a,a2= TriaAdjSharedEdge[a];// les 2 numero de l arete dans les 2 triangles218 register Triangle *t1=this,*t2=adj[a];// les 2 triangles adjacent 219 register short a1=a,a2=AdjEdgeNumber[a];// les 2 numero de l arete dans les 2 triangles 220 220 if(a2/4 !=0) return 0; // arete lock or MarkUnSwap 221 221 222 register BamgVertex *sa=t1-> TriaVertices[VerticesOfTriangularEdge[a1][0]];223 register BamgVertex *sb=t1-> TriaVertices[VerticesOfTriangularEdge[a1][1]];224 register BamgVertex *s1=t1-> TriaVertices[OppositeVertex[a1]];225 register BamgVertex *s2=t2-> TriaVertices[OppositeVertex[a2]];222 register BamgVertex *sa=t1->vertices[VerticesOfTriangularEdge[a1][0]]; 223 register BamgVertex *sb=t1->vertices[VerticesOfTriangularEdge[a1][1]]; 224 register BamgVertex *s1=t1->vertices[OppositeVertex[a1]]; 225 register BamgVertex *s2=t2->vertices[OppositeVertex[a2]]; 226 226 227 227 Icoor2 det1=t1->det , det2=t2->det ;
Note:
See TracChangeset
for help on using the changeset viewer.