Ignore:
Timestamp:
08/11/10 10:38:41 (15 years ago)
Author:
Mathieu Morlighem
Message:

as usual

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Bamg/Triangle.cpp

    r5143 r5148  
    1919                        ISSMERROR("i>=nbv || j>=nbv || k>=nbv");
    2020                }
    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;
    2626                det=0;
    2727        }
     
    2929        /*FUNCTION Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2) {{{1*/
    3030        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;
    3636                if (v0) det=0;
    3737                else {
     
    4848
    4949                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("   TriaAdjTriangles pointer 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]);
    5454                printf("   det (integer triangle determinant) = %i\n",det);
    5555                if (link){
     
    6262                printf("\nThree vertices:\n");
    6363                for(i=0;i<3;i++){
    64                         if (TriaVertices[i]){
    65                                 TriaVertices[i]->Echo();
     64                        if (vertices[i]){
     65                                vertices[i]->Echo();
    6666                        }
    6767                        else{
     
    9999                        k++;
    100100                        //Get ttc, adjacent triangle of t with respect to vertex j
    101                         ttc =  t->TriaAdjTriangles[j];
     101                        ttc =  t->adj[j];
    102102                        //is the current triangle inside or outside?
    103103                        outside = !ttc->link;
     
    108108                        t = ttc;
    109109                        //NextEdge[3] = {1,2,0};
    110                         jc = NextEdge[t->TriaAdjSharedEdge[j]&3];
     110                        jc = NextEdge[t->AdjEdgeNumber[j]&3];
    111111                        j = NextEdge[jc];
    112112
     
    132132
    133133                // 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;
    136136                do {
    137137                        while (t->swap(j,koption)){
     
    139139                                NbSwap++;
    140140                                k++;
    141                                 t=  tp->TriaAdjTriangles[jp];      // set unchange t qnd j for previous triangles
    142                                 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];
    143143                        }
    144144                        // end on this  Triangle
     
    146146                        jp = NextEdge[j];
    147147
    148                         t=  tp->TriaAdjTriangles[jp];      // set unchange t qnd j for previous triangles
    149                         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];
    150150
    151151                } while( t != this);
     
    159159                if (link) {
    160160                        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;
    164164                        if (a>=0) {
    165                                 t = TriaAdjTriangles[a];
     165                                t = adj[a];
    166166                                //  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]];
    171171                        }
    172172                }
     
    177177        double   Triangle::QualityQuad(int a,int option) const{
    178178                double q;
    179                 if (!link || TriaAdjSharedEdge[a] &4)
     179                if (!link || AdjEdgeNumber[a] &4)
    180180                 q=  -1;
    181181                else {
    182                         Triangle * t = TriaAdjTriangles[a];
     182                        Triangle * t = adj[a];
    183183                        if (t-this<0) q=  -1;// because we do 2 times
    184184                        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 )
    186186                         q= -1;
    187187                        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]];
    192192                                q =  QuadQuality(v0,v1,v2,v3); // do the float part
    193193                        }
     
    200200        void Triangle::Set(const Triangle & rec,const Mesh & Th ,Mesh & ThNew){
    201201                *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]);
    208208                if (link  >= Th.triangles && link  < Th.triangles + Th.nbt)
    209209                 link = ThNew.triangles + Th.Number(link);
     
    216216                if(a/4 !=0) return 0;// arete lock or MarkUnSwap
    217217
    218                 register Triangle *t1=this,*t2=TriaAdjTriangles[a];// les 2 triangles adjacent
    219                 register short a1=a,a2=TriaAdjSharedEdge[a];// les 2 numero de l arete dans les 2 triangles
     218                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
    220220                if(a2/4 !=0) return 0; // arete lock or MarkUnSwap
    221221
    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]];
    226226
    227227                Icoor2 det1=t1->det , det2=t2->det ;
Note: See TracChangeset for help on using the changeset viewer.