diff --git a/Geo/discreteEdge.cpp b/Geo/discreteEdge.cpp index d14ee32475341b4c7362c5a37a40591ea964b689..3eeaffe98eaf62c855f6f26286b600a6fd6585ec 100644 --- a/Geo/discreteEdge.cpp +++ b/Geo/discreteEdge.cpp @@ -33,11 +33,11 @@ discreteEdge::discreteEdge(GModel *model, int num, GVertex *_v0, GVertex *_v1) #endif } -void discreteEdge::orderMLines() +void discreteEdge::orderMLines() { //printf(" *** ORDERING DISCRETE EDGE %d of size %d \n", this->tag(), lines.size()); - std::vector<MLine*> _m ; + std::vector<MLine*> _m ; std::list<MLine*> segments; //store all lines in a list : segments @@ -56,7 +56,7 @@ void discreteEdge::orderMLines() std::map<MVertex*,MLine*>::iterator it2 = boundv.find(vR); if (it2==boundv.end()) boundv.insert(std::make_pair(vR,*it)); else boundv.erase(it2); - } + } //find the first MLine and erase it from the list segments MLine *firstLine; @@ -67,7 +67,7 @@ void discreteEdge::orderMLines() segments.erase(it); break; } - } + } } else if (boundv.size()==0) // periodic { @@ -79,10 +79,10 @@ void discreteEdge::orderMLines() } //loop over all segments to order segments and store it in the list _m - _m.push_back(firstLine); + _m.push_back(firstLine); _orientation.push_back(1); MVertex *first = _m[0]->getVertex(0); - MVertex *last = _m[0]->getVertex(1); + MVertex *last = _m[0]->getVertex(1); //printf("first =%d last =%d \n", first->getNum(), last->getNum()); while (first != last){ if (segments.empty())break; @@ -91,7 +91,7 @@ void discreteEdge::orderMLines() MLine *e = *it; if (e->getVertex(0) == last){ //printf("orientation 1: beginV=%d \n", e->getVertex(0)->getNum()); - _m.push_back(e); + _m.push_back(e); segments.erase(it); _orientation.push_back(1); last = e->getVertex(1); @@ -100,7 +100,7 @@ void discreteEdge::orderMLines() } else if (e->getVertex(1) == last){ //printf("orientation 0: endV=%d \n", e->getVertex(1)->getNum()); - _m.push_back(e); + _m.push_back(e); segments.erase(it); _orientation.push_back(0); last = e->getVertex(0); @@ -120,19 +120,19 @@ void discreteEdge::orderMLines() return; } } - } + } //lines is now a list of ordered MLines lines = _m; - //special case reverse orientation + //special case reverse orientation if (lines.size() < 2) return; - if (_orientation[0] && lines[0]->getVertex(1) != lines[1]->getVertex(1) - && lines[0]->getVertex(1) != lines[1]->getVertex(0)){ + if (_orientation[0] && lines[0]->getVertex(1) != lines[1]->getVertex(1) + && lines[0]->getVertex(1) != lines[1]->getVertex(0)){ printf("coucou here \n"); for (int i=0;i<lines.size();i++) _orientation[i] = !_orientation[i] ; } - + // for (int i=0;i<lines.size();i++){ // printf("AFTER ORDERING segment or=%d, vert=%d, %d\n", (int)_orientation[i], lines[i]->getVertex(0)->getNum(), lines[i]->getVertex(1)->getNum() ); // } @@ -145,7 +145,7 @@ void discreteEdge::orderMLines() void discreteEdge::setBoundVertices() { - if (boundv.size()==2){ + if (boundv.size()==2){ //printf("Found a regular open Curve \n"); std::vector<GVertex*> bound_vertices; for (std::map<MVertex*,MLine*>::const_iterator iter = boundv.begin(); iter != boundv.end(); iter++){ @@ -159,7 +159,7 @@ void discreteEdge::setBoundVertices() break; } } - if(!existVertex){ + if(!existVertex){ //printf(" !!! bound vertex %d does not exist, create one \n", vE->getNum()); GVertex *gvB = new discreteVertex(model(),vE->getNum()); bound_vertices.push_back(gvB); @@ -172,12 +172,12 @@ void discreteEdge::setBoundVertices() if (itve != mesh_vertices.end()) mesh_vertices.erase(itve); } - + //printf("set bound vertices %d %d size mesh-vertices =%d \n",bound_vertices[0]->tag(),bound_vertices[1]->tag(), mesh_vertices.size()); - v0 = bound_vertices[0]; + v0 = bound_vertices[0]; v1 = bound_vertices[1]; } - else if (boundv.size()==0){ + else if (boundv.size()==0){ //printf("Found a closed Curve add vertex \n"); std::vector<MLine*>::const_iterator it = lines.begin(); @@ -189,9 +189,9 @@ void discreteEdge::setBoundVertices() mesh_vertices.erase(std::find(mesh_vertices.begin(), mesh_vertices.end(), vE)); ///printf("set bound vertices %d %d , coord = %g %g %g\n",gvB->tag(),gvB->tag(), gvB->x(), gvB->y(), gvB->z()); - v0 = gvB; + v0 = gvB; v1 = gvB; - + } v0->addEdge(this); @@ -205,26 +205,26 @@ void discreteEdge::setBoundVertices() +---------------+--------------+----------- ... ----------+ _pars[0]=0 _pars[1]=1 _pars[2]=2 _pars[N+1]=N+1 */ -void discreteEdge::parametrize() +void discreteEdge::parametrize() { - + for (int i=0;i<lines.size()+1;i++){ _pars.push_back(i); - } + } //Replace MVertex by MedgeVertex - //we need to recreate lines, triangles and tets + //we need to recreate lines, triangles and tets //that contain those new MEdgeVertices std::map<MVertex*, MVertex*> old2new; std::vector<MVertex*> newVertices; std::vector<MLine*> newLines; - + MVertex *vL = getBeginVertex()->mesh_vertices[0]; int i = 0; for(i=0 ; i < lines.size()-1; i++){ - MVertex *vR ; + MVertex *vR ; if (_orientation[i] == 1 ) vR = lines[i]->getVertex(1); else vR = lines[i]->getVertex(0); int param = i+1; @@ -253,12 +253,13 @@ void discreteEdge::parametrize() for (unsigned int i = 0; i < (*iFace)->getNumMeshElements(); ++i){ MElement *e = (*iFace)->getMeshElement(i); int N = e->getNumVertices(); - MVertex *v[N]; + //MVertex *v[N]; + std::vector<MVertex *> v(N); for(int j = 0; j < N; j++){ v[j] = e->getVertex(j); } //printf("old triangle v0=%p (%d) v1=%p (%d) v2=%p (%d) \n",v[0], v[0]->getNum() , v[1],v[1]->getNum() ,v[2], v[2]->getNum()); - for (int j = 0; j < N; j++){ + for (int j = 0; j < N; j++){ std::map<MVertex*, MVertex*>::iterator itmap = old2new.find(v[j]); MVertex *vNEW; if (itmap != old2new.end()) { @@ -267,7 +268,7 @@ void discreteEdge::parametrize() } } //printf(" new triangle v0=%p (%d) v1=%p (%d) v2=%p (%d) \n",v[0], v[0]->getNum() , v[1],v[1]->getNum() ,v[2], v[2]->getNum()); - if (N == 3) newTriangles.push_back(new MTriangle(v[0], v[1], v[2])); + if (N == 3) newTriangles.push_back(new MTriangle(v[0], v[1], v[2])); else if ( N == 4) newQuadrangles.push_back(new MQuadrangle(v[0], v[1], v[2], v[3])); } @@ -288,11 +289,12 @@ void discreteEdge::parametrize() for (unsigned int i = 0; i < (*iRegion)->getNumMeshElements(); ++i){ MElement *e = (*iRegion)->getMeshElement(i); int N = e->getNumVertices(); - MVertex *v[N]; + //MVertex *v[N]; + std::vector<MVertex *> v(N); for(int j = 0; j < N; j++){ v[j] = e->getVertex(j); } - for (int j = 0; j < N; j++){ + for (int j = 0; j < N; j++){ std::map<MVertex*, MVertex*>::iterator itmap = old2new.find(v[j]); MVertex *vNEW; if (itmap != old2new.end()) { @@ -300,7 +302,7 @@ void discreteEdge::parametrize() v[j]=vNEW; } } - if (N == 4) newTetrahedra.push_back(new MTetrahedron(v[0], v[1], v[2], v[3])); + if (N == 4) newTetrahedra.push_back(new MTetrahedron(v[0], v[1], v[2], v[3])); else if ( N == 5) newPyramids.push_back(new MPyramid(v[0], v[1], v[2], v[3], v[4])); else if ( N == 6) newPrisms.push_back(new MPrism(v[0], v[1], v[2], v[3], v[4], v[5])); else if ( N == 8) newHexahedra.push_back(new MHexahedron(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7])); @@ -324,17 +326,17 @@ void discreteEdge::parametrize() // mesh_vertices[i]->getParameter(0,t1); // printf("** AFTER v1=%d t1=%g\n", mesh_vertices[i]->getNum(),t1 ); // } - - + + } -void discreteEdge::getLocalParameter(const double &t, int &iLine, +void discreteEdge::getLocalParameter(const double &t, int &iLine, double &tLoc) const { for (iLine=0 ; iLine<lines.size() ;iLine++){ double tmin = _pars[iLine]; double tmax = _pars[iLine+1]; - if (t >= tmin && t <= tmax){ + if (t >= tmin && t <= tmax){ tLoc = _orientation[iLine] ? (t-tmin)/(tmax-tmin) : 1 - (t-tmin)/(tmax-tmin) ; //printf("getlocal param t=%g, iLine=%d, tLoc=%g \n", t, iLine, tLoc); return; @@ -342,9 +344,9 @@ void discreteEdge::getLocalParameter(const double &t, int &iLine, } } -GPoint discreteEdge::point(double par) const +GPoint discreteEdge::point(double par) const { - + double tLoc; int iEdge; getLocalParameter(par,iEdge,tLoc); @@ -362,7 +364,7 @@ GPoint discreteEdge::point(double par) const return GPoint(x,y,z); } -SVector3 discreteEdge::firstDer(double par) const +SVector3 discreteEdge::firstDer(double par) const { double tLoc; int iEdge; @@ -381,7 +383,7 @@ SVector3 discreteEdge::firstDer(double par) const return SVector3(dx,dy,dz); } -Range<double> discreteEdge::parBounds(int i) const +Range<double> discreteEdge::parBounds(int i) const { - return Range<double>(0, lines.size()); + return Range<double>(0, lines.size()); }