Ignore:
Timestamp:
08/19/10 09:38:48 (15 years ago)
Author:
Mathieu Morlighem
Message:

renamed some fields and got rid of curve->next

File:
1 edited

Legend:

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

    r5400 r5401  
    51105110                                                                        if (b->Required() ) break;
    51115111                                                                        int kprev=k;
    5112                                                                         k = e->AdjVertexNumber[kprev];// next vertices
     5112                                                                        k = e->AdjVertexIndex[kprev];// next vertices
    51135113                                                                        e = e->Adj[kprev];
    51145114                                                                        ISSMASSERT(e);
     
    53295329                                for(int phase=0;phase<=step;phase++){
    53305330
    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);
    54195397                                                                        }
     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;
    54205419                                                                }
    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                                                 }
    5455                                         } //  end loop on equi curve
     5420                                                        }
     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                                        }
    54565455
    54575456                                        if (!phase)  { //
     
    54605459                                                Lcurve = L;
    54615460                                                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;
    54675463                                        }
    54685464                                }
Note: See TracChangeset for help on using the changeset viewer.