Changeset 5460
- Timestamp:
- 08/20/10 16:03:01 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Bamg
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/BamgVertex.cpp
r5400 r5460 109 109 long BamgVertex::Optim(int i,int koption){ 110 110 long ret=0; 111 if ( t && ( vint >= 0 ) && (vint<3) ){112 ret = t->Optim( vint,koption);111 if ( t && (IndexInTriangle >= 0 ) && (IndexInTriangle <3) ){ 112 ret = t->Optim(IndexInTriangle,koption); 113 113 if(!i){ 114 114 t =0; // for no future optime 115 vint= 0;115 IndexInTriangle= 0; 116 116 } 117 117 } … … 128 128 register Triangle* tbegin= t , *tria = t , *ttc; 129 129 130 register int k=0,kk=0,j = EdgesVertexTriangle[ vint][0],jc;130 register int k=0,kk=0,j = EdgesVertexTriangle[IndexInTriangle][0],jc; 131 131 R2 P(s->r),PNew(0,0); 132 132 do { -
issm/trunk/src/c/objects/Bamg/BamgVertex.h
r5447 r5460 25 25 long ReferenceNumber; 26 26 Direction DirOfSearch; 27 short vint; // the vertex number in triangle; varies between 0 and 2 in t27 short IndexInTriangle; // the vertex number in triangle; varies between 0 and 2 in t 28 28 29 29 union { 30 30 Triangle *t; // one triangle which is containing the vertex 31 31 long color; 32 BamgVertex * to;// used in geometry BamgVertex to know the Mesh Vertex associated33 VertexOnGeom *GeometricalEdgeHook; // if vint== 8; // set with Mesh::SetVertexFieldOn()34 BamgVertex *BackgroundVertexHook; // if vint== 16 on Background vertex Mesh::SetVertexFieldOnBTh()35 VertexOnEdge *BackgroundEdgeHook; // if vint== 32 on Background edge32 BamgVertex *MeshVertexHook; // used in geometry BamgVertex to know the Mesh Vertex associated 33 VertexOnGeom *GeometricalEdgeHook; // if IndexInTriangle == 8; // set with Mesh::SetVertexFieldOn() 34 BamgVertex *BackgroundVertexHook; // if IndexInTriangle == 16 on Background vertex Mesh::SetVertexFieldOnBTh() 35 VertexOnEdge *BackgroundEdgeHook; // if IndexInTriangle == 32 on Background edge 36 36 }; 37 37 -
issm/trunk/src/c/objects/Bamg/Mesh.cpp
r5448 r5460 219 219 /*}}}1*/ 220 220 /*FUNCTION Mesh::Mesh(long maxnbv,Mesh & BT,BamgOpts* bamgopts,int keepBackVertices){{{1*/ 221 Mesh::Mesh(long maxnbv,Mesh & BT,BamgOpts* bamgopts,int keepBackVertices) :Gh(BT.Gh),BTh(BT) { 222 TriangulateFromGeom1(maxnbv,bamgopts,keepBackVertices); 221 Mesh::Mesh(long imaxnbv,Mesh & BT,BamgOpts* bamgopts,int keepBackVertices) :Gh(BT.Gh),BTh(BT) { 222 this->Init(imaxnbv); 223 TriangulateFromGeom1(bamgopts,keepBackVertices); 223 224 } 224 225 /*}}}1*/ 225 226 /*FUNCTION Mesh::Mesh(long maxnbv,Geometry & G,BamgOpts* bamgopts){{{1*/ 226 Mesh::Mesh(long maxnbv,Geometry & G,BamgOpts* bamgopts):Gh(G),BTh(*this){ 227 TriangulateFromGeom0(maxnbv,bamgopts); 227 Mesh::Mesh(long imaxnbv,Geometry & G,BamgOpts* bamgopts):Gh(G),BTh(*this){ 228 Init(imaxnbv); 229 TriangulateFromGeom0(bamgopts); 228 230 } 229 231 /*}}}1*/ … … 2267 2269 //find a triangle holding the vertex i1 (first vertex of the ith cracked edge) 2268 2270 Triangle* tbegin=vertices[i1].t; 2269 k=vertices[i1]. vint;//local number of i in triangle tbegin2271 k=vertices[i1].IndexInTriangle;//local number of i in triangle tbegin 2270 2272 ISSMASSERT(GetId((*tbegin)[k])==GetId(vertices[i1])); 2271 2273 … … 2584 2586 ISSMASSERT(t && direction); 2585 2587 2586 AdjacentTriangle ta(t,EdgesVertexTriangle[v0-> vint][0]);// previous edges2588 AdjacentTriangle ta(t,EdgesVertexTriangle[v0->IndexInTriangle][0]);// previous edges 2587 2589 2588 2590 while (1) { … … 3231 3233 for (i=nbvold;i<nbv;i++){ 3232 3234 BamgVertex* s = vertices + i; 3233 AdjacentTriangle ta(s->t, EdgesVertexTriangle[s-> vint][1]);3235 AdjacentTriangle ta(s->t, EdgesVertexTriangle[s->IndexInTriangle][1]); 3234 3236 Triangle* tbegin= (Triangle*) ta; 3235 3237 long kt; … … 3273 3275 R2 A=vA,B=vB; 3274 3276 BamgVertex * pvA=&vA, * pvB=&vB; 3275 if (vA. vint== IsVertexOnVertex){3277 if (vA.IndexInTriangle == IsVertexOnVertex){ 3276 3278 pA=vA.BackgroundVertexHook; 3277 3279 } 3278 else if (vA. vint== IsVertexOnEdge){3280 else if (vA.IndexInTriangle == IsVertexOnEdge){ 3279 3281 pA=vA.BackgroundEdgeHook->be; 3280 3282 tA=vA.BackgroundEdgeHook->abcisse; … … 3284 3286 } 3285 3287 3286 if (vB. vint== IsVertexOnVertex){3288 if (vB.IndexInTriangle == IsVertexOnVertex){ 3287 3289 pB=vB.BackgroundVertexHook; 3288 3290 } 3289 else if(vB. vint== IsVertexOnEdge){3291 else if(vB.IndexInTriangle == IsVertexOnEdge){ 3290 3292 pB=vB.BackgroundEdgeHook->be; 3291 3293 tB=vB.BackgroundEdgeHook->abcisse; … … 3309 3311 // 2 walk n back gound boundary to find the final vertex B 3310 3312 3311 if( vA. vint== IsVertexOnEdge)3313 if( vA.IndexInTriangle == IsVertexOnEdge) 3312 3314 { // find the start edge 3313 3315 e = vA.BackgroundEdgeHook->be; 3314 3316 3315 3317 } 3316 else if (vB. vint== IsVertexOnEdge)3318 else if (vB.IndexInTriangle == IsVertexOnEdge) 3317 3319 { 3318 3320 theta = 1-theta; … … 3507 3509 for (i=0;i<nbv;i++){ 3508 3510 vertices[i].t=0; 3509 vertices[i]. vint=0;3511 vertices[i].IndexInTriangle=0; 3510 3512 if (ordre[i]) ordre[nbvb++]=ordre[i]; 3511 3513 } … … 4086 4088 } 4087 4089 BamgVertex & vi = vertices[i]; 4088 AdjacentTriangle ta(t,EdgesVertexTriangle[vertices[i]. vint][0]);4090 AdjacentTriangle ta(t,EdgesVertexTriangle[vertices[i].IndexInTriangle][0]); 4089 4091 BamgVertex *pvj0 = ta.EdgeVertex(0); 4090 4092 while (1) { … … 4871 4873 /*}}}1*/ 4872 4874 /*FUNCTION Mesh::TriangulateFromGeom0{{{1*/ 4873 void Mesh::TriangulateFromGeom0( long imaxnbv,BamgOpts* bamgopts){4875 void Mesh::TriangulateFromGeom0(BamgOpts* bamgopts){ 4874 4876 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/GeomToTriangles0)*/ 4875 4877 /*Generate mesh from geometry*/ … … 4894 4896 4895 4897 //initialize Mesh 4896 Init(imaxnbv);4897 4898 nbv=0; 4898 4899 NbVerticesOnGeomVertex=0; … … 4922 4923 4923 4924 //Add pointer from geometry (Gh) to vertex from mesh (Th) 4924 Gh[i]. to=vertices+nbv;4925 Gh[i].MeshVertexHook=vertices+nbv; 4925 4926 4926 4927 //Build VerticesOnGeomVertex for current point 4927 VerticesOnGeomVertex[nbv]=VertexOnGeom(*Gh[i]. to,Gh[i]);4928 VerticesOnGeomVertex[nbv]=VertexOnGeom(*Gh[i].MeshVertexHook,Gh[i]); 4928 4929 4929 4930 //nbv increment … … 4979 4980 //check that edges has been allocated 4980 4981 ISSMASSERT(edges); 4981 edges[nbe].v[0]=a-> to;4982 edges[nbe].v[1]=b-> to;;4982 edges[nbe].v[0]=a->MeshVertexHook; 4983 edges[nbe].v[1]=b->MeshVertexHook;; 4983 4984 edges[nbe].ReferenceNumber = e->ReferenceNumber; 4984 4985 edges[nbe].GeometricalEdgeHook = e; … … 5006 5007 e=&ei; // e = reference of current edge 5007 5008 a=ei(k); // a = pointer toward the kth vertex of the current edge 5008 va = a-> to;// va = pointer toward mesh vertex associated5009 va = a->MeshVertexHook; // va = pointer toward mesh vertex associated 5009 5010 e->SetMark(); // Mark edge 5010 5011 … … 5104 5105 ISSMASSERT(e); 5105 5106 }// for(;;) 5106 vb = b-> to;5107 vb = b->MeshVertexHook; 5107 5108 NbEdgeCurve = Max((long) (lcurve +0.5), (long) 1); 5108 5109 NbNewPoints = NbEdgeCurve-1; … … 5165 5166 /*}}}1*/ 5166 5167 /*FUNCTION Mesh::TriangulateFromGeom1{{{1*/ 5167 void Mesh::TriangulateFromGeom1( long imaxnbv,BamgOpts* bamgopts,int KeepVertices){5168 void Mesh::TriangulateFromGeom1(BamgOpts* bamgopts,int KeepVertices){ 5168 5169 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/GeomToTriangles1)*/ 5169 5170 … … 5195 5196 5196 5197 //Initialize new mesh 5197 this->Init(imaxnbv);5198 5198 BTh.SetVertexFieldOn(); 5199 5199 int* bcurve = new int[Gh.nbcurves]; // … … 5224 5224 vertices[nbv] =Gh[i]; 5225 5225 vertices[nbv].i=I2(0,0); 5226 Gh[i]. to= vertices + nbv;// save Geom -> Th5226 Gh[i].MeshVertexHook = vertices + nbv;// save Geom -> Th 5227 5227 VerticesOnGeomVertex[nbv]= VertexOnGeom(vertices[nbv],Gh[i]); 5228 5228 nbv++; 5229 5229 } 5230 else Gh[i]. to=0;5230 else Gh[i].MeshVertexHook=0; 5231 5231 } 5232 5232 for (i=0;i<BTh.NbVerticesOnGeomVertex;i++){ … … 5235 5235 GeometricalVertex* gv=vog; 5236 5236 BamgVertex *bv = vog; 5237 ISSMASSERT(gv-> to); // use of Geom -> Th5238 VertexOnBThVertex[NbVertexOnBThVertex++]=VertexOnVertex(gv-> to,bv);5239 gv-> to->m = bv->m; // for taking the metrix of the background mesh5237 ISSMASSERT(gv->MeshVertexHook); // use of Geom -> Th 5238 VertexOnBThVertex[NbVertexOnBThVertex++]=VertexOnVertex(gv->MeshVertexHook,bv); 5239 gv->MeshVertexHook->m = bv->m; // for taking the metrix of the background mesh 5240 5240 } 5241 5241 } … … 5337 5337 register GeometricalVertex * GA0 = *(*peequi)[k0equi].GeometricalEdgeHook; 5338 5338 BamgVertex *A0; 5339 A0 = GA0-> to; // the vertex in new mesh5339 A0 = GA0->MeshVertexHook; // the vertex in new mesh 5340 5340 BamgVertex *A1; 5341 5341 VertexOnGeom *GA1; … … 5346 5346 if(ongequi->Required()){ 5347 5347 GeometricalVertex *GA1 = *(*peequi)[1-k0equi].GeometricalEdgeHook; 5348 A1 = GA1-> to; //5348 A1 = GA1->MeshVertexHook; // 5349 5349 } 5350 5350 else { … … 5410 5410 ISSMASSERT(eeequi[k1equi].GeometricalEdgeHook->IsRequiredVertex()); 5411 5411 register GeometricalVertex * GA1 = *eeequi[k1equi].GeometricalEdgeHook; 5412 A1=GA1-> to;// the vertex in new mesh5412 A1=GA1->MeshVertexHook;// the vertex in new mesh 5413 5413 ISSMASSERT(A1-vertices>=0 && A1-vertices<nbv); 5414 5414 break; … … 5691 5691 taret=AdjacentTriangle(0,0); // erreur 5692 5692 5693 AdjacentTriangle tta(a.t,EdgesVertexTriangle[a. vint][0]);5693 AdjacentTriangle tta(a.t,EdgesVertexTriangle[a.IndexInTriangle][0]); 5694 5694 BamgVertex *v1, *v2 = tta.EdgeVertex(0),*vbegin =v2; 5695 5695 // we turn around a in the direct direction -
issm/trunk/src/c/objects/Bamg/Mesh.h
r5401 r5460 125 125 //Inline methods 126 126 inline void CreateSingleVertexToTriangleConnectivity(){ 127 for (int i=0;i<nbv;i++) vertices[i]. vint=0, vertices[i].t=NULL;127 for (int i=0;i<nbv;i++) vertices[i].IndexInTriangle=0, vertices[i].t=NULL; 128 128 for (int i=0;i<nbt;i++) triangles[i].SetSingleVertexToTriangleConnectivity(); 129 129 } … … 145 145 146 146 private: 147 void TriangulateFromGeom1( long maxnbv,BamgOpts* bamgopts,int KeepVertices=1);// the real constructor mesh adaption148 void TriangulateFromGeom0( long maxnbv,BamgOpts* bamgopts);// the real constructor mesh generator147 void TriangulateFromGeom1(BamgOpts* bamgopts,int KeepVertices=1);// the real constructor mesh adaption 148 void TriangulateFromGeom0(BamgOpts* bamgopts);// the real constructor mesh generator 149 149 void Init(long); 150 150 }; -
issm/trunk/src/c/objects/Bamg/Triangle.cpp
r5401 r5460 299 299 /*FUNCTION Triangle::SetSingleVertexToTriangleConnectivity{{{1*/ 300 300 void Triangle::SetSingleVertexToTriangleConnectivity() { 301 if (vertices[0]) (vertices[0]->t=this,vertices[0]-> vint=0);302 if (vertices[1]) (vertices[1]->t=this,vertices[1]-> vint=1);303 if (vertices[2]) (vertices[2]->t=this,vertices[2]-> vint=2);301 if (vertices[0]) (vertices[0]->t=this,vertices[0]->IndexInTriangle=0); 302 if (vertices[1]) (vertices[1]->t=this,vertices[1]->IndexInTriangle=1); 303 if (vertices[2]) (vertices[2]->t=this,vertices[2]->IndexInTriangle=2); 304 304 }/*}}}*/ 305 305 /*FUNCTION Triangle::SetUnMarkUnSwap{{{1*/ -
issm/trunk/src/c/objects/Bamg/VertexOnEdge.cpp
r5150 r5460 21 21 void VertexOnEdge::SetOnBTh(){ 22 22 v->BackgroundEdgeHook=this; 23 v-> vint=IsVertexOnEdge;23 v->IndexInTriangle=IsVertexOnEdge; 24 24 } 25 25 /*}}}*/ -
issm/trunk/src/c/objects/Bamg/VertexOnGeom.cpp
r5447 r5460 58 58 void VertexOnGeom::SetOn(){ 59 59 mv->GeometricalEdgeHook=this; 60 mv-> vint=IsVertexOnGeom;60 mv->IndexInTriangle=IsVertexOnGeom; 61 61 } 62 62 /*}}}*/ -
issm/trunk/src/c/objects/Bamg/VertexOnVertex.cpp
r5151 r5460 28 28 /*FUNCTION VertexOnVertex::SetOnBTh{{{1*/ 29 29 void VertexOnVertex::SetOnBTh(){ 30 v->BackgroundVertexHook=bv;v-> vint=IsVertexOnVertex;30 v->BackgroundVertexHook=bv;v->IndexInTriangle=IsVertexOnVertex; 31 31 }/*}}}*/ 32 32
Note:
See TracChangeset
for help on using the changeset viewer.