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 ...@@ -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) SPoint2 &param1, SPoint2 &param2)
{ {
std::vector<SPoint2> p1, p2; std::vector<SPoint2> p1, p2;
...@@ -250,7 +250,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf, ...@@ -250,7 +250,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
if (p1.size() == 1 && p2.size() == 1){ if (p1.size() == 1 && p2.size() == 1){
param1 = p1[0]; param1 = p1[0];
param2 = p2[0]; param2 = p2[0];
return true;
} }
else if (p1.size() == 1 && p2.size() == 2){ else if (p1.size() == 1 && p2.size() == 2){
double d1 = double d1 =
...@@ -261,7 +260,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf, ...@@ -261,7 +260,6 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
(p1[0].x() - p2[1].y()) * (p1[0].y() - p2[1].y()); (p1[0].x() - p2[1].y()) * (p1[0].y() - p2[1].y());
param1 = p1[0]; param1 = p1[0];
param2 = d2 < d1 ? p2[1] : p2[0]; param2 = d2 < d1 ? p2[1] : p2[0];
return true;
} }
else if (p2.size() == 1 && p1.size() == 2){ else if (p2.size() == 1 && p1.size() == 2){
double d1 = double d1 =
...@@ -272,9 +270,12 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf, ...@@ -272,9 +270,12 @@ bool reparamMeshVerticesOnFace(MVertex *v1, MVertex *v2, GFace *gf,
(p2[0].x() - p1[1].y()) * (p2[0].y() - p1[1].y()); (p2[0].x() - p1[1].y()) * (p2[0].y() - p1[1].y());
param1 = d2 < d1 ? p1[1] : p1[0]; param1 = d2 < d1 ? p1[1] : p1[0];
param2 = p2[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) bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param)
...@@ -295,7 +296,7 @@ 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(); GVertex *gv = (GVertex*)v->onWhat();
param = gv->reparamOnFace(gf, 1); 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(); std::list<GEdge*> ed = gv->edges();
for(std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); it++) for(std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); it++)
if((*it)->isSeam(gf)) return false; if((*it)->isSeam(gf)) return false;
...@@ -306,7 +307,7 @@ bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param) ...@@ -306,7 +307,7 @@ bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param)
v->getParameter(0, t); v->getParameter(0, t);
param = ge->reparamOnFace(gf, t, 1); 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)) if(ge->isSeam(gf))
return false; return false;
} }
......
...@@ -165,7 +165,7 @@ class MFaceVertex : public MVertex{ ...@@ -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); SPoint2 &param1, SPoint2 &param2);
bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param); bool reparamMeshVertexOnFace(MVertex *v, GFace *gf, SPoint2 &param);
bool reparamMeshVertexOnEdge(MVertex *v, GEdge *ge, double &param); bool reparamMeshVertexOnEdge(MVertex *v, GEdge *ge, double &param);
......
...@@ -317,7 +317,7 @@ static void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve, ...@@ -317,7 +317,7 @@ static void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve,
if(!linear && if(!linear &&
gf->geomType() != GEntity::DiscreteSurface && gf->geomType() != GEntity::DiscreteSurface &&
gf->geomType() != GEntity::BoundaryLayerSurface){ gf->geomType() != GEntity::BoundaryLayerSurface){
reparamOK = reparamMeshVerticesOnFace(v0, v1, gf, p0, p1); reparamOK = reparamMeshEdgeOnFace(v0, v1, gf, p0, p1);
} }
double US[100], VS[100]; double US[100], VS[100];
if(reparamOK && !linear && gf->geomType() != GEntity::DiscreteSurface){ 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