diff --git a/Geo/MQuadrangle.h b/Geo/MQuadrangle.h index e6f021a23723b18ff7387baf81d1cd74697ece55..19591a4342706ac1ea08aaf10ab96633389dc4ab 100644 --- a/Geo/MQuadrangle.h +++ b/Geo/MQuadrangle.h @@ -447,7 +447,7 @@ void inline sort2(T &a, T &b) } template <class T> -void sort4(T *t[3]) +void sort4(T *t[4]) { sort2<T*>(t[0], t[1]); sort2<T*>(t[2], t[3]); diff --git a/Mesh/DivideAndConquer.cpp b/Mesh/DivideAndConquer.cpp index f7f52a6dec8c6363e5a86d4535494a02c3649c08..aa42ddeacd6da401e4ef943f6f6f4caea0801a55 100644 --- a/Mesh/DivideAndConquer.cpp +++ b/Mesh/DivideAndConquer.cpp @@ -727,14 +727,14 @@ double DocRecord::Lloyd(int type) PointRecord &pt = points[i]; std::vector<SPoint2> pts; voronoiCell (i,pts); - double E, A; + double E = 0., A; if (!points[i].data){ SPoint2 p (pt.where.h,pt.where.v); if (type == 0) - centroidOfPolygon (p,pts, cgs(i,0), cgs(i,1),E, A); + centroidOfPolygon(p,pts, cgs(i,0), cgs(i,1), E, A); else - centroidOfOrientedBox (pts, 0.0, cgs(i,0),cgs(i,1),E, A); + centroidOfOrientedBox(pts, 0.0, cgs(i,0), cgs(i,1), E, A); } inertia_tot += E; } diff --git a/Mesh/directions3D.cpp b/Mesh/directions3D.cpp index 17f951430c1de952f682ced70bd2ad6c4b72724e..3356af0dc8590f16cd7ad24ef0d50d8fd2c54e27 100644 --- a/Mesh/directions3D.cpp +++ b/Mesh/directions3D.cpp @@ -35,10 +35,10 @@ void Frame_field::init_region(GRegion* gr){ std::list<GFace*> faces; STensor3 m(1.0); - Nearest_point::init_region(gr); - - faces = gr->faces(); - + Nearest_point::init_region(gr); + + faces = gr->faces(); + temp.clear(); field.clear(); @@ -66,7 +66,7 @@ void Frame_field::init_region(GRegion* gr){ void Frame_field::init_face(GFace* gf){ // Fills the auxiliary std::map "temp" with a pair <vertex, STensor3> - // for each vertex of the face gf. + // for each vertex of the face gf. unsigned int i; int j; bool ok; @@ -83,30 +83,30 @@ void Frame_field::init_face(GFace* gf){ for(i=0;i<gf->getNumMeshElements();i++){ element = gf->getMeshElement(i); - + average_x = 0.0; average_y = 0.0; - + for(j=0;j<element->getNumVertices();j++){ vertex = element->getVertex(j); reparamMeshVertexOnFace(vertex,gf,point); average_x = average_x + point.x(); average_y = average_y + point.y(); - } - + } + average_x = average_x/element->getNumVertices(); average_y = average_y/element->getNumVertices(); - + for(j=0;j<element->getNumVertices();j++){ vertex = element->getVertex(j); - + if(gf->geomType()==GEntity::CompoundSurface){ ok = translate(gf,octree,vertex,SPoint2(average_x,average_y),v1,v2); } else{ ok = improved_translate(gf,vertex,v1,v2); } - + if(ok){ v1.normalize(); v2.normalize(); @@ -169,7 +169,7 @@ bool Frame_field::translate(GFace* gf,MElementOctree* octree,MVertex* vertex,SPo } ok = true; //? - + if(ok){ gp1 = gf->point(x1,y1); gp2 = gf->point(x2,y2); @@ -190,27 +190,27 @@ bool Frame_field::improved_translate(GFace* gf,MVertex* vertex,SVector3& v1,SVec SVector3 s1,s2; SVector3 normal; SVector3 basis_u,basis_v; - Pair<SVector3,SVector3> derivatives; - + Pair<SVector3,SVector3> derivatives; + reparamMeshVertexOnFace(vertex,gf,point); x = point.x(); y = point.y(); - + angle = backgroundMesh::current()->getAngle(x,y,0.0); derivatives = gf->firstDer(point); - + s1 = derivatives.first(); s2 = derivatives.second(); normal = crossprod(s1,s2); - + basis_u = s1; basis_u.normalize(); basis_v = crossprod(normal,basis_u); basis_v.normalize(); - + v1 = basis_u*cos(angle) + basis_v*sin(angle); v2 = crossprod(v1,normal); - + return 1; } @@ -250,16 +250,16 @@ STensor3 Frame_field::combine(double x,double y,double z){ SVector3 vec1,vec2,vec3; SVector3 final1,final2; STensor3 m(1.0),m2(1.0); - + m = search(x,y,z); m2 = m; - ok = Nearest_point::search(x,y,z,vec); - + ok = Nearest_point::search(x,y,z,vec); + if(ok){ vec1 = SVector3(m.get_m11(),m.get_m21(),m.get_m31()); vec2 = SVector3(m.get_m12(),m.get_m22(),m.get_m32()); vec3 = SVector3(m.get_m13(),m.get_m23(),m.get_m33()); - + val1 = fabs(dot(vec,vec1)); val2 = fabs(dot(vec,vec2)); val3 = fabs(dot(vec,vec3)); @@ -273,11 +273,11 @@ STensor3 Frame_field::combine(double x,double y,double z){ else{ other = vec3; } - + final1 = crossprod(vec,other); final1.normalize(); final2 = crossprod(vec,final1); - + m2.set_m11(vec.x()); m2.set_m21(vec.y()); m2.set_m31(vec.z()); @@ -288,7 +288,7 @@ STensor3 Frame_field::combine(double x,double y,double z){ m2.set_m23(final2.y()); m2.set_m33(final2.z()); } - + return m2; } @@ -303,7 +303,7 @@ double Frame_field::get_ratio(GFace* gf,SPoint2 point){ double val; double uv[2]; double tab[3]; - + uv[0] = point.x(); uv[1] = point.y(); buildMetric(gf,uv,tab); @@ -427,7 +427,7 @@ GRegion* Frame_field::test(){ } void Frame_field::clear(){ - Nearest_point::clear(); + Nearest_point::clear(); temp.clear(); field.clear(); #if defined(HAVE_ANN) @@ -441,7 +441,7 @@ void Frame_field::clear(){ #endif } -// BARYCENTRIC +// BARYCENTRIC #include "cross3D.h" @@ -450,7 +450,7 @@ double min(const double a, const double b) { return (b<a)?b:a; } double squ(const double a) { return a*a; } int Frame_field::build_vertex_to_vertices(GEntity* gr, int onWhat, bool initialize){ - // build vertex to vertices data + // build vertex to vertices data std::set<MVertex*> vertices; if(initialize) vertex_to_vertices.clear(); for(unsigned int i=0; i<gr->getNumMeshElements(); i++){ @@ -471,7 +471,7 @@ int Frame_field::build_vertex_to_vertices(GEntity* gr, int onWhat, bool initiali vertices.insert(pElem->getVertex((j+k) % n)); vertex_to_vertices.insert(std::pair<MVertex*,std::set<MVertex*> >(pVertex,vertices)); } - + } } return vertex_to_vertices.size(); @@ -559,14 +559,14 @@ int Frame_field::findAnnIndex(SPoint3 p){ } void Frame_field::initFace(GFace* gf){ - // align crosses of gf with the normal (average on neighbour elements) + // align crosses of gf with the normal (average on neighbour elements) // at all vertices of the GFace gf build_vertex_to_elements(gf); for(std::map<MVertex*, std::set<MElement*> >::const_iterator it = vertex_to_elements.begin(); it != vertex_to_elements.end(); it++){ std::set<MElement*> elements = it->second; SVector3 Area = SVector3(0,0,0); - for(std::set<MElement*>::const_iterator iter=elements.begin(); + for(std::set<MElement*>::const_iterator iter=elements.begin(); iter != elements.end(); iter++){ MElement *pElem = *iter; int n = pElem->getNumVertices(); @@ -621,7 +621,7 @@ void Frame_field::initFace(GFace* gf){ MVertex* pVertex = it->first; std::set<MElement*> elements = it->second; if(elements.size() != 2){ - std::cout << "The face has an open boundary" << std::endl; + std::cout << "The face has an open boundary" << std::endl; exit(1); } MEdge edg1 = (*elements.begin())->getEdge(0); @@ -631,7 +631,7 @@ void Frame_field::initFace(GFace* gf){ std::map<MVertex*, STensor3>::iterator iter = crossField.find(pVertex); if(iter == crossField.end()) { - std::cout << "This should not happen: cross not found 1" << std::endl; + std::cout << "This should not happen: cross not found 1" << std::endl; exit(1); } cross3D x(cross3D((*iter).second)); @@ -650,7 +650,7 @@ void Frame_field::initFace(GFace* gf){ // fixme: we have to rebuild the vertex_to_elements list // to have a working iterator oin the verticies of gf // The natural iterator gf->getMeshVertex(i) seems not to work - // when the option PackingOfParallelogram is on. + // when the option PackingOfParallelogram is on. build_vertex_to_elements(gf); for(std::map<MVertex*, std::set<MElement*> >::const_iterator it = vertex_to_elements.begin(); it != vertex_to_elements.end(); it++){ @@ -664,7 +664,7 @@ void Frame_field::initFace(GFace* gf){ cross3D y; if(iter == crossField.end()){ std::cout << "This should not happen: cross not found 2" << std::endl; - std::cout << pVertex0->x() << "," << pVertex0->y() << "," << pVertex0->z() << std::endl; + std::cout << pVertex0->x() << "," << pVertex0->y() << "," << pVertex0->z() << std::endl; //exit(1); y = cross3D(); } @@ -676,7 +676,7 @@ void Frame_field::initFace(GFace* gf){ MVertex* pVertex = listVertices[index]; //nearest vertex on contour iter = crossField.find(pVertex); if(iter == crossField.end()){ - std::cout << "This should not happen: cross not found 3" << std::endl; + std::cout << "This should not happen: cross not found 3" << std::endl; exit(1); } cross3D x = cross3D((*iter).second); //nearest cross on contour, x.getFrst() is the normal @@ -686,7 +686,7 @@ void Frame_field::initFace(GFace* gf){ STensor3 m = convert( y.rotate(conj(x.rotationToOnSurf(y)))); //rotation around the normal SVector3 v2 = y.getFrst(); if(fabs(angle(v1,v2)) > 1e-8){ - std::cout << "This should not happen: rotation affected the normal" << std::endl; + std::cout << "This should not happen: rotation affected the normal" << std::endl; exit(1); } crossField[pVertex0] = m; @@ -696,7 +696,7 @@ void Frame_field::initFace(GFace* gf){ } void Frame_field::initRegion(GRegion* gr, int n){ - std::list<GFace*> faces = gr->faces(); + std::list<GFace*> faces = gr->faces(); for(std::list<GFace*>::const_iterator iter=faces.begin(); iter!=faces.end(); iter++){ initFace(*iter); // smoothing must be done immediately because crosses on the contour vertices @@ -734,7 +734,7 @@ double Frame_field::findBarycenter(std::map<MVertex*, std::set<MVertex*> >::cons MVertex* pVertex0 = iter->first; std::set<MVertex*> list = iter->second; cross3D x(m0); - if(debug) std::cout << "# " << pVertex0->getNum() + if(debug) std::cout << "# " << pVertex0->getNum() << " with " << list.size() << " neighbours" << std::endl; SVector3 T = SVector3(0.), dT; @@ -742,7 +742,7 @@ double Frame_field::findBarycenter(std::map<MVertex*, std::set<MVertex*> >::cons energy = 0; for (std::set<MVertex*>::const_iterator it=list.begin(); it != list.end(); ++it){ MVertex *pVertex = *it; - if(pVertex->getNum() == pVertex0->getNum()) + if(pVertex->getNum() == pVertex0->getNum()) std::cout << "This should not happen!" << std::endl; std::map<MVertex*, STensor3>::const_iterator itB = crossField.find(pVertex); if(itB == crossField.end()){ // not found @@ -807,7 +807,7 @@ double Frame_field::smooth(){ double enew, eold; double energy = 0; - for(std::map<MVertex*, std::set<MVertex*> >::const_iterator iter + for(std::map<MVertex*, std::set<MVertex*> >::const_iterator iter = vertex_to_vertices.begin(); iter != vertex_to_vertices.end(); ++iter){ //MVertex* pVertex0 = iter->first; @@ -832,7 +832,7 @@ double Frame_field::smooth(){ return energy; } -void Frame_field::save(const std::vector<std::pair<SPoint3, STensor3> > data, +void Frame_field::save(const std::vector<std::pair<SPoint3, STensor3> > data, const std::string& filename){ const cross3D origin(SVector3(1,0,0), SVector3(0,1,0)); SPoint3 p1; @@ -886,7 +886,7 @@ void Frame_field::recur_connect_vert(MVertex *v, it != v2v.upper_bound(v) ; ++it){ MVertex *nextV = it->second; - //change orientation + //change orientation ///------------------ printf("*********************** Changing orientation \n"); @@ -900,7 +900,7 @@ void Frame_field::recur_connect_vert(MVertex *v, nextCross.print("nextCross "); prod.print("product"); fullMatrix<double> mat(3,3); prod.getMat(mat); - + //find biggest dot product fullVector<int> Id(3); for (int i = 0; i < 3; i++){ @@ -913,38 +913,38 @@ void Frame_field::recur_connect_vert(MVertex *v, } } } - + if (Id(0) +Id(1)+ Id(2) != 3 || (Id(0) == 1 && Id(1)==1 && Id(2)==1)) { - std::cout << "This should not happen: sum should be 0+1+2" << std::endl; + std::cout << "This should not happen: sum should be 0+1+2" << std::endl; printf("Id =%d %d %d \n", Id(0), Id(1), Id(2)); - //exit(1); + //exit(1); return; } //create new cross - fullMatrix<double> newmat(3,3); + fullMatrix<double> newmat(3,3); for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ newmat(i,j) = nextCross(Id(j),i); } } - - STensor3 newcross; + + STensor3 newcross; newcross.setMat(newmat); crossField[iter->first] = newcross; - newcross.print("newcross"); + newcross.print("newcross"); //continue recursion - recur_connect_vert (nextV, newcross, v2v,touched); + recur_connect_vert (nextV, newcross, v2v,touched); } } void Frame_field::continuousCrossField(GRegion *gr, GFace *gf){ - + printf("continuous cross field \n"); - + //start from a vertex of a face - std::list<GFace*> faces = gr->faces(); + std::list<GFace*> faces = gr->faces(); bool foundFace = false; for(std::list<GFace*>::const_iterator iter=faces.begin(); iter!=faces.end(); iter++){ if (*iter == gf){ @@ -953,14 +953,14 @@ void Frame_field::continuousCrossField(GRegion *gr, GFace *gf){ } } if (!foundFace){ - std::cout << "This should not happen: face does not belong to region" << std::endl; + std::cout << "This should not happen: face does not belong to region" << std::endl; exit(1); } //build connectivity build_vertex_to_vertices(gr, -1, true); std::multimap<MVertex*,MVertex*> v2v; - for(std::map<MVertex*, std::set<MVertex*> >::const_iterator iter + for(std::map<MVertex*, std::set<MVertex*> >::const_iterator iter = vertex_to_vertices.begin(); iter != vertex_to_vertices.end(); ++iter){ MVertex *v = iter->first; std::set<MVertex*> mySet = iter->second; @@ -975,7 +975,7 @@ void Frame_field::continuousCrossField(GRegion *gr, GFace *gf){ std::map<MVertex*, STensor3>::iterator iter = crossField.find(beginV); STensor3 bCross = iter->second; recur_connect_vert (beginV,bCross,v2v,touched); - + } void Frame_field::saveCrossField(const std::string& filename, double scale, bool full){ @@ -984,7 +984,7 @@ void Frame_field::saveCrossField(const std::string& filename, double scale, bool double k = scale; std::ofstream file(filename.c_str()); file << "View \"cross field\" {\n"; - for(std::map<MVertex*, STensor3>::const_iterator it = crossField.begin(); + for(std::map<MVertex*, STensor3>::const_iterator it = crossField.begin(); it != crossField.end(); it++){ SPoint3 p = it->first->point(); STensor3 m = it->second; @@ -992,7 +992,7 @@ void Frame_field::saveCrossField(const std::string& filename, double scale, bool //double val1=1.0, val2=1.0; p1 = SPoint3(p.x() + k*m.get_m11(), p.y() + k*m.get_m21(), - p.z() + k*m.get_m31()); + p.z() + k*m.get_m31()); print_segment(p,p1,val1,val2,file); p1 = SPoint3(p.x() - k*m.get_m11(), p.y() - k*m.get_m21(), @@ -1025,7 +1025,7 @@ void Frame_field::save_dist(const std::string& filename){ std::ofstream file(filename.c_str()); file << "View \"Distance\" {\n"; - for(std::map<MEdge, double>::iterator it = crossDist.begin(); + for(std::map<MEdge, double>::iterator it = crossDist.begin(); it != crossDist.end(); it++){ MVertex* pVerta = it->first.getVertex(0); MVertex* pVertb = it->first.getVertex(1); @@ -1076,9 +1076,9 @@ void Frame_field::save_energy(GRegion* gr, const std::string& filename){ //std::vector<double> *out = data->incrementList(1, TYPE_TET, NumNodes); std::vector<double> *out = data->incrementList(3, TYPE_TET, NumNodes); for(int j = 0; j < pTet->getNumVertices(); j++) - out->push_back(pTet->getVertex(j)->x()); + out->push_back(pTet->getVertex(j)->x()); for(int j = 0; j < pTet->getNumVertices(); j++) - out->push_back(pTet->getVertex(j)->y()); + out->push_back(pTet->getVertex(j)->y()); for(int j = 0; j < pTet->getNumVertices(); j++) out->push_back(pTet->getVertex(j)->z()); for(int j = 0; j < pTet->getNumVertices(); j++){ @@ -1090,7 +1090,7 @@ void Frame_field::save_energy(GRegion* gr, const std::string& filename){ double jac[3][3], inv[3][3]; pTet->getJacobian(u, v, w, jac); inv3x3(jac, inv); - SVector3 sum(0,0,0); + SVector3 sum(0,0,0); for(int k = 0; k < pTet->getNumEdges(); k++){ int nod1 = pTet->edges_tetra(k,0); int nod2 = pTet->edges_tetra(k,1); @@ -1135,7 +1135,7 @@ void Size_field::init_region(GRegion* gr){ faces = gr->faces(); - boundary.clear(); + boundary.clear(); for(it=faces.begin();it!=faces.end();it++){ gf = *it; @@ -1176,7 +1176,7 @@ void Size_field::solve(GRegion* gr){ size_t i; int count; - int count2; + int count2; double val; double volume; std::set<MVertex*> interior; @@ -1193,14 +1193,14 @@ void Size_field::solve(GRegion* gr){ count++; } //printf("\n"); - //printf("number of boundary vertices = %d\n",count); + //printf("number of boundary vertices = %d\n",count); for(i=0;i<gr->tetrahedra.size();i++){ interior.insert(gr->tetrahedra[i]->getVertex(0)); interior.insert(gr->tetrahedra[i]->getVertex(1)); interior.insert(gr->tetrahedra[i]->getVertex(2)); interior.insert(gr->tetrahedra[i]->getVertex(3)); - } + } for(it=interior.begin();it!=interior.end();it++){ it2 = boundary.find(*it); @@ -1223,7 +1223,7 @@ void Size_field::solve(GRegion* gr){ count2++; volume = volume + gr->tetrahedra[i]->getVolume(); } - //printf("number of tetrahedra = %d\n",count2); + //printf("number of tetrahedra = %d\n",count2); //printf("volume = %f\n",volume); if(assembler.sizeOfR()){ @@ -1236,7 +1236,7 @@ void Size_field::solve(GRegion* gr){ } delete system; - #endif + #endif } double Size_field::search(double x,double y,double z){ @@ -1249,11 +1249,11 @@ double Size_field::search(double x,double y,double z){ std::map<MVertex*,double>::iterator it2; std::map<MVertex*,double>::iterator it3; std::map<MVertex*,double>::iterator it4; - - val = 1.0; - + + val = 1.0; + element = (MElement*)octree->find(x,y,z,3,true); - + if(element!=NULL){ temp1[0] = x; temp1[1] = y; @@ -1265,7 +1265,7 @@ double Size_field::search(double x,double y,double z){ v = temp2[1]; w = temp2[2]; - it1 = boundary.find(element->getVertex(0)); + it1 = boundary.find(element->getVertex(0)); it2 = boundary.find(element->getVertex(1)); it3 = boundary.find(element->getVertex(2)); it4 = boundary.find(element->getVertex(3)); @@ -1323,16 +1323,16 @@ void Size_field::print_field(GRegion* gr){ //printf("x = %f, y = %f, z = %f, mesh size = %f\n",x,y,z,it->second); } - //printf("\n"); + //printf("\n"); printf("min mesh size = %f\n",min); - printf("max mesh size = %f\n",max); + printf("max mesh size = %f\n",max); printf("total number of vertices = %zu\n",boundary.size()); - printf("\n"); + printf("\n"); std::ofstream file("laplace.pos"); - file << "View \"test\" {\n"; + file << "View \"test\" {\n"; for(i=0;i<gr->tetrahedra.size();i++){ x1 = gr->tetrahedra[i]->getVertex(0)->x(); @@ -1362,7 +1362,7 @@ void Size_field::print_field(GRegion* gr){ h4 = it4->second; file << "SS (" - << x1 << ", " << y1 << ", " << z1 << ", " + << x1 << ", " << y1 << ", " << z1 << ", " << x2 << ", " << y2 << ", " << z2 << ", " << x3 << ", " << y3 << ", " << z3 << ", " << x4 << ", " << y4 << ", " << z4 << "){" @@ -1410,45 +1410,45 @@ void Nearest_point::init_region(GRegion* gr){ std::set<MVertex*>::iterator it2; fullMatrix<double> gauss_points; fullVector<double> gauss_weights; - + gaussIntegration::getTriangle(8,gauss_points,gauss_weights); - gauss_num = gauss_points.size1(); - + gauss_num = gauss_points.size1(); + faces = gr->faces(); - + field.clear(); vicinity.clear(); temp.clear(); - + for(it=faces.begin();it!=faces.end();it++){ gf = *it; for(i=0;i<gf->getNumMeshElements();i++){ element = gf->getMeshElement(i); - + x1 = element->getVertex(0)->x(); y1 = element->getVertex(0)->y(); z1 = element->getVertex(0)->z(); - + x2 = element->getVertex(1)->x(); y2 = element->getVertex(1)->y(); z2 = element->getVertex(1)->z(); - + x3 = element->getVertex(2)->x(); y3 = element->getVertex(2)->y(); z3 = element->getVertex(2)->z(); - + for(j=0;j<gauss_num;j++){ u = gauss_points(j,0); v = gauss_points(j,1); - + x = T(u,v,x1,x2,x3); y = T(u,v,y1,y2,y3); z = T(u,v,z1,z2,z3); - + field.push_back(SPoint3(x,y,z)); vicinity.push_back(element); } - + temp.insert(element->getVertex(0)); temp.insert(element->getVertex(1)); temp.insert(element->getVertex(2)); @@ -1462,9 +1462,9 @@ void Nearest_point::init_region(GRegion* gr){ //field.push_back(SPoint3(x,y,z)); //vicinity.push_back(NULL); } - + duplicate = annAllocPts(field.size(),3); - + for(i=0;i<field.size();i++){ duplicate[i][0] = field[i].x(); duplicate[i][1] = field[i].y(); @@ -1475,29 +1475,30 @@ void Nearest_point::init_region(GRegion* gr){ #endif } -bool Nearest_point::search(double x,double y,double z,SVector3& vec){ +bool Nearest_point::search(double x,double y,double z,SVector3& vec) +{ int index; - bool val; - #if defined(HAVE_ANN) + bool val = false; +#if defined(HAVE_ANN) double e; double e2; SPoint3 found; ANNpoint query; ANNidxArray indices; ANNdistArray distances; - + query = annAllocPt(3); query[0] = x; query[1] = y; query[2] = z; - + indices = new ANNidx[1]; distances = new ANNdist[1]; - + e = 0.0; kd_tree->annkSearch(query,1,indices,distances,e); index = indices[0]; - + annDeallocPt(query); delete[] indices; delete[] distances; @@ -1508,9 +1509,9 @@ bool Nearest_point::search(double x,double y,double z,SVector3& vec){ else{ found = field[index]; } - - e2 = 0.000001; - + + e2 = 0.000001; + if(fabs(found.x()-x)>e2 || fabs(found.y()-y)>e2 || fabs(found.z()-z)>e2){ vec = SVector3(found.x()-x,found.y()-y,found.z()-z); vec.normalize(); @@ -1520,8 +1521,8 @@ bool Nearest_point::search(double x,double y,double z,SVector3& vec){ vec = SVector3(1.0,0.0,0.0); val = 0; } - #endif - +#endif + return val; } @@ -1531,24 +1532,24 @@ double Nearest_point::T(double u,double v,double val1,double val2,double val3){ //The following method comes from this page : gamedev.net/topic/552906-closest-point-on-triangle //It can also be found on this page : geometrictools.com/LibMathematics/Distance/Distance.html -SPoint3 Nearest_point::closest(MElement* element,SPoint3 point){ +SPoint3 Nearest_point::closest(MElement* element,SPoint3 point){ SVector3 edge0 = SVector3(element->getVertex(1)->x()-element->getVertex(0)->x(),element->getVertex(1)->y()-element->getVertex(0)->y(), element->getVertex(1)->z()-element->getVertex(0)->z()); SVector3 edge1 = SVector3(element->getVertex(2)->x()-element->getVertex(0)->x(),element->getVertex(2)->y()-element->getVertex(0)->y(), element->getVertex(2)->z()-element->getVertex(0)->z()); SVector3 v0 = SVector3(element->getVertex(0)->x()-point.x(),element->getVertex(0)->y()-point.y(), element->getVertex(0)->z()-point.z()); - + double a = dot(edge0,edge0); double b = dot(edge0,edge1); double c = dot(edge1,edge1); double d = dot(edge0,v0); double e = dot(edge1,v0); - + double det = a*c-b*b; double s = b*e-c*d; double t = b*d-a*e; - + if(s+t<det){ if(s<0.0){ if(t<0.0){ @@ -1610,23 +1611,23 @@ SPoint3 Nearest_point::closest(MElement* element,SPoint3 point){ t = 1.0-s; } } - + return SPoint3(element->getVertex(0)->x()+s*edge0.x()+t*edge1.x(),element->getVertex(0)->y()+s*edge0.y()+t*edge1.y(), element->getVertex(0)->z()+s*edge0.z()+t*edge1.z()); } double Nearest_point::clamp(double x,double min,double max){ double val; - + val = x; - + if(val<min){ val = min; } else if(val>max){ val = max; } - + return val; } @@ -1639,11 +1640,11 @@ void Nearest_point::print_field(GRegion* gr){ MElement* element; MVertex* vertex; SVector3 vec; - + k = 0.05; std::ofstream file("nearest.pos"); file << "View \"test\" {\n"; - + for(i=0;i<gr->getNumMeshElements();i++){ element = gr->getMeshElement(i); for(j=0;j<element->getNumVertices();j++){ @@ -1658,7 +1659,7 @@ void Nearest_point::print_field(GRegion* gr){ } } } - + file << "};\n"; } @@ -1672,9 +1673,9 @@ void Nearest_point::print_segment(SPoint3 p1,SPoint3 p2,std::ofstream& file){ GRegion* Nearest_point::test(){ GRegion* gr; GModel* model = GModel::current(); - + gr = *(model->firstRegion()); - + return gr; } diff --git a/Mesh/meshGFaceBDS.cpp b/Mesh/meshGFaceBDS.cpp index 0f41aea38b87db37b4b781236d9d48ccbabd9d54..5a07a44fff99ce0c30671291bd71fc9e0ac38d60 100644 --- a/Mesh/meshGFaceBDS.cpp +++ b/Mesh/meshGFaceBDS.cpp @@ -67,7 +67,7 @@ inline double computeEdgeLinearLength_new(BDS_Point *p1, BDS_Point *p2, GFace * double SCALINGU, double SCALINGV) { const int nbSb = 10; - GPoint GP[nbSb-1]; + GPoint GP[nbSb]; for (int i = 1; i < nbSb; i++){ double xi = (double)i / nbSb; diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp index b20d9e2797f22852ec282a308f5a169156db7901..b4a929d09091832abdc7b730fcb2fcb247d4e957 100644 --- a/Mesh/meshGFaceOptimize.cpp +++ b/Mesh/meshGFaceOptimize.cpp @@ -2459,9 +2459,9 @@ static std::vector<MVertex*> computeBoundingPoints (const std::vector<MElement*> std::list<MVertex *> oriented; { std::list<MEdge>::iterator itsz = border.begin(); - border.erase (itsz); oriented.push_back(itsz->getVertex(0)); oriented.push_back(itsz->getVertex(1)); + border.erase (itsz); } while (border.size()){ std::list<MVertex*>::iterator itb = oriented.begin();