Skip to content
Snippets Groups Projects
Commit 6dc860f9 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

fix high order extruded meshes

parent f118fe15
No related branches found
No related tags found
No related merge requests found
......@@ -241,7 +241,7 @@ static void getAllParameters(MVertex *v, GFace *gf, std::vector<SPoint2> &params
}
}
bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
bool reparamMeshEdgeOnFace(MVertex *v1, MVertex *v2, GFace *gf,
SPoint2 &param1, SPoint2 &param2)
{
std::vector<SPoint2> p1, p2;
......@@ -250,7 +250,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
if (p1.size() == 1 && p2.size() == 1){
param1 = p1[0];
param2 = p2[0];
return true;
}
else if (p1.size() == 1 && p2.size() == 2){
double d1 =
......@@ -261,7 +260,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
(p1[0].x() - p2[1].y()) * (p1[0].y() - p2[1].y());
param1 = p1[0];
param2 = d2 < d1 ? p2[1] : p2[0];
return true;
}
else if (p2.size() == 1 && p1.size() == 2){
double d1 =
......@@ -272,9 +270,12 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
(p2[0].x() - p1[1].y()) * (p2[0].y() - p1[1].y());
param1 = d2 < d1 ? p1[1] : p1[0];
param2 = p2[0];
return true;
}
return false;
else{
param1 = gf->parFromPoint(SPoint3(v1->x(), v1->y(), v1->z()));
param2 = gf->parFromPoint(SPoint3(v2->x(), v2->y(), v2->z()));
}
return true;
}
bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param)
......@@ -295,7 +296,7 @@ bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param)
GVertex *gv = (GVertex*)v->onWhat();
param = gv->reparamOnFace(gf, 1);
// abort if we could be on a seam
// shout if we could be on a seam
std::list<GEdge*> ed = gv->edges();
for(std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); it++)
if((*it)->isSeam(gf)) return false;
......@@ -306,7 +307,7 @@ bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param)
v->getParameter(0, t);
param = ge->reparamOnFace(gf, t, 1);
// abort if we are on a seam (todo: try dir=-1 and compare)
// shout if we are on a seam
if(ge->isSeam(gf))
return false;
}
......
......@@ -165,7 +165,7 @@ class MFaceVertex : public MVertex{
}
};
bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
bool reparamMeshEdgeOnFace(MVertex *v1, MVertex *v2, GFace *gf,
SPoint2 &param1, SPoint2 &param2);
bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param);
bool reparamMeshVertexOnEdge(MVertex *v, GEdge *ge, double &param);
......
......@@ -317,7 +317,7 @@ static void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve,
if(!linear &&
gf->geomType() != GEntity::DiscreteSurface &&
gf->geomType() != GEntity::BoundaryLayerSurface){
reparamOK = reparamMeshVerticesOnFace(v0, v1, gf, p0, p1);
reparamOK = reparamMeshEdgeOnFace(v0, v1, gf, p0, p1);
}
double US[100], VS[100];
if(reparamOK && !linear && gf->geomType() != GEntity::DiscreteSurface){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment