Skip to content
Snippets Groups Projects
Commit ccd5d14f authored by PA Beaufort's avatar PA Beaufort
Browse files

fillHoles() has been updated

parent d95bf7f8
No related branches found
No related tags found
No related merge requests found
...@@ -153,12 +153,12 @@ void discreteFace::createGeometry() ...@@ -153,12 +153,12 @@ void discreteFace::createGeometry()
updateTopology(toParam); updateTopology(toParam);
for(unsigned int i=0; i<toParam.size(); i++){ for(unsigned int i=0; i<toParam.size(); i++){
printf("MAP(%d) : aspect ratio = %12.5E\n",i,toParam[i]->aspectRatio()); //printf("MAP(%d) : aspect ratio = %12.5E\n",i,toParam[i]->aspectRatio());
char name[256]; char name[256];
sprintf(name,"map%d.pos",i); //sprintf(name,"map%d.pos",i);
toParam[i]->print(name,i); toParam[i]->print(name,i);
fillHoles(toParam[i]); fillHoles(toParam[i]);
sprintf(name,"mapFilled%d.pos",i); //sprintf(name,"mapFilled%d.pos",i);
toParam[i]->print(name,i); toParam[i]->print(name,i);
} }
for(unsigned int i=0; i<toParam.size(); i++){ for(unsigned int i=0; i<toParam.size(); i++){
...@@ -695,32 +695,54 @@ void discreteFace::fillHoles(triangulation* trian) ...@@ -695,32 +695,54 @@ void discreteFace::fillHoles(triangulation* trian)
std::map<double,std::vector<MVertex*> >::reverse_iterator it = bords.rbegin(); std::map<double,std::vector<MVertex*> >::reverse_iterator it = bords.rbegin();
++it; ++it;
for(; it!=bords.rend(); ++it){ for(; it!=bords.rend(); ++it){
double x[3] = {0.,0.,0.}; SPoint3 x(0.,0.,0.);
std::vector<MVertex*> mv = it->second; std::vector<MVertex*> mv = it->second;
for(unsigned int j=0; j<mv.size(); j++){ for(unsigned int j=0; j<mv.size(); j++){
x[0] += mv[j]->x(); SPoint3 v0, v1;
x[1] += mv[j]->y(); if(j==0){
x[2] += mv[j]->z(); SPoint3 v(mv[mv.size()-1]->x(),mv[mv.size()-1]->y(),mv[mv.size()-1]->z());
v0 = v;
SPoint3 v_(mv[j+1]->x(),mv[j+1]->y(),mv[j+1]->z());
v1 = v_;
}
else if (j==mv.size()-1){
SPoint3 v(mv[j-1]->x(),mv[j-1]->y(),mv[j-1]->z());
v0 = v;
SPoint3 v_(mv[0]->x(),mv[0]->y(),mv[0]->z());
v1 = v_;
} }
x[0] /= mv.size(); x[1] /= mv.size(); x[2] /= mv.size(); else{
MVertex* center = new MVertex(x[0],x[1],x[2]); SPoint3 v(mv[j-1]->x(),mv[j-1]->y(),mv[j-1]->z());
v0 = v;
SPoint3 v_(mv[j+1]->x(),mv[j+1]->y(),mv[j+1]->z());
v1 = v_;
}
SPoint3 vpp(mv[j]->x(),mv[j]->y(),mv[j]->z());
SVector3 v00(vpp,v0);
SVector3 v11(v1,vpp);
x += vpp*(norm(v00)+norm(v11));
}
x *= .5/it->first;
MVertex* center = new MVertex(x.x(),x.y(),x.z());
this->mesh_vertices.push_back(center); this->mesh_vertices.push_back(center);
center->setEntity(this);
trian->vert.insert(center); trian->vert.insert(center);
SVector3 nmean(0.,0.,0.);
for(unsigned int j=1; j<mv.size(); j++){ for(unsigned int j=1; j<mv.size(); j++){
if(std::abs(tri3Darea(mv[j],mv[j-1],center))<1e-15){
MVertex temp(center->x()+mv[j]->x()/mv.size(),center->y()+mv[j-1]->y()/mv.size(),(1+1./mv.size())*center->z());
*center = temp;
center->setEntity(this);
}
addTriangle(trian,new MTriangle(mv[j],mv[j-1],center)); addTriangle(trian,new MTriangle(mv[j],mv[j-1],center));
} SVector3 temp0(center->x()-mv[j]->x(),center->y()-mv[j]->y(),center->z()-mv[j]->z());
if(std::abs(tri3Darea(mv[0],mv[mv.size()-1],center))<1e-15){ SVector3 temp1(center->x()-mv[j-1]->x(),center->y()-mv[j-1]->y(),center->z()-mv[j-1]->z());
MVertex temp(center->x()+mv[0]->x()/mv.size(),center->y()+mv[mv.size()-1]->y()/mv.size(),(1+1./mv.size())*center->z()); SVector3 temp(crossprod(temp0,temp1));
*center = temp; nmean += temp;
center->setEntity(this);
} }
addTriangle(trian,new MTriangle(mv[0],mv[mv.size()-1],center)); addTriangle(trian,new MTriangle(mv[0],mv[mv.size()-1],center));
SVector3 temp0(center->x()-mv[0]->x(),center->y()-mv[0]->y(),center->z()-mv[0]->z());
SVector3 temp1(center->x()-mv[mv.size()-1]->x(),center->y()-mv[mv.size()-1]->y(),center->z()-mv[mv.size()-1]->z());
SVector3 temp(crossprod(temp0,temp1));
nmean += temp;
nmean *= 1./(norm(nmean)*mv.size());
MVertex update(center->x()+nmean.x(),center->y()+nmean.y(),center->z()+nmean.z());
*center = update;
center->setEntity(this);
} }
#endif #endif
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment